Am fost de codificare o grămadă de diferite implementări binare de arbori de căutare recent (AVL, splay, treap) și sunt curios dacă există un deosebit „bun“ mod de a scrie un iterator pentru a traversa aceste structuri. L-am folosit chiar acum soluție este de a avea fiecare nod în magazin BST pointerii elementele următoare și anterioare din copac, care reduce iterație la un standard de listă legate de iterație. Cu toate acestea, eu nu sunt foarte mulțumit cu acest răspuns. Aceasta crește utilizarea spațiului fiecărui nod prin două pointeri (următoare și anterioare), și într-un sens este doar inselat.
Știu o modalitate de a construi un iterator arbore binar de căutare care utilizează O (h) spațiu de stocare auxiliar (unde h este înălțimea de copac), folosind o stivă pentru a ține evidența nodurilor de frontieră pentru a explora mai târziu, dar eu am rezistat codificare asta din cauza utilizarea memoriei. Am fost în speranța există o modalitate de a construi un iterator care utilizează spațiu numai constantă.
Întrebarea mea este aceasta - există o modalitate de a proiecta un iterator peste un arbore binar de căutare cu următoarele proprietăți?
- Elementele sunt vizitate în ordine crescătoare (adică o parcurgeri inordine)
next()șihasNext()interogări rula în O (1) timp.- Utilizarea memoriei este O (1)
Pentru a face mai ușor, este bine dacă presupuneți că structura arborescentă nu se schimbă forma în timpul iterație (adică nu deleții sau rotatii), dar ar fi foarte cool dacă a existat o soluție care ar putea ocupa într-adevăr, acest lucru.













