Cum să treci un copac binar cu saturația iteratorului în rusă

Bine ai venit! Spuneți-mi, vă rog, cum să treci un copac binar cu un iterator? (ordonare în ordine prestabilită). Am creat algoritmi pentru trecerea unui copac în ordinea corectă pentru preorder și postorder. dar nu înțeleg foarte bine cum este posibil să lucrăm cu iteratorul pe exemplul unui copac. (Am dreptul de a ocupa doar o valoare constantă în memorie, adică nu puteți utiliza un hashset, o frunză de matrice și alte structuri cu lungimi variabile în mod dinamic).







presetate 28 martie '14 la 18:16

Indicați imediat că în nodurile copacului trebuie păstrate referințe la părinții lor. În iterator, stocăm doar referința la nodul curent. Codul va fi în C ++, dar este ușor să îl rescrieți în Java.

Dacă nodul curent are un copil stâng, mergeți la el. În caz contrar, dacă există un descendent drept, mergeți la el. Dacă nu există descendenți, atunci trebuie să urcăm lanțul părinților până când întâlnim un nod din care nu am vizitat încă descendentul corect, adică un astfel de nod, în care vom ajunge la stânga în procesul de ascensiune. Copilul drept al acestui nod va fi cel care urmează să traverseze.







Rădăcina copacului va fi prima care va fi traversată.

Dacă nodul curent are subtreea potrivită, atunci nodul următor va fi cel mai din stânga nod din acest subtree. Altfel, este necesar să urcăm lanțul părinților până când ne întâlnim cu părintele, căruia îi vom veni de partea stângă. Acest părinte va fi următorul nod.

Nodul stâng al copacului va fi primul care va traversa.

Cel mai simplu caz. Trecem la părinte. Dacă venim de la copilul din stânga și avem un copil potrivit, mergeți la nodul din stânga al sub-alfabetei drepte. În caz contrar, rămânem în părinte.

Din nou, nodul stâng al copacului va fi primul care va traversa.







Articole similare

Trimiteți-le prietenilor: