Implementacja iteratora przez drzewo binarne (lub dowolne) za pomocą C ++ 11

Chciałbym utworzyć iterator na drzewie binarnym, aby móc korzystać z pętli opartej na zakresie. Rozumiem, że powinienem najpierw zaimplementować funkcję begin () i end ().

Begin powinien prawdopodobnie wskazywać na root. Jednak zgodnie ze specyfikacją funkcje end () zwracają „element następujący po ostatnim poprawnym elemencie”. Który to element (węzeł)? Czy nie byłoby nielegalne wskazywanie na „nieprawidłowe” miejsce?

Drugą rzeczą jest operator ++. Jak najlepiej zwrócić „następny” element w drzewie? Potrzebuję tylko porady, aby zacząć od tego programowania.

Chciałbym rozszerzyć / rozszerzyć moje pytanie *. Co jeśli chciałbym iterować po drzewie z dowolną aralnością? Niech każdy węzeł ma wektor dzieci i niech begin () wskaże „prawdziwy” korzeń. Prawdopodobnie musiałbym zaimplementować kolejkę (dla pierwszej szerokości) wewnątrz klasy iteratora, aby przechowywać unique_ptr's w węzłach, prawda? Wtedy, gdy kolejka jest pusta, wiedziałbym, że przekazałem wszystkie węzły i dlatego powinien zwrócić TreeIterator (nullptr), gdy wywoływany jest oprator ++ (). Czy jest sens? Chcę, aby było to tak proste, jak to tylko możliwe i tylko iteracja do przodu.

* Czy powinienem utworzyć nowy wątek?

questionAnswers(3)

yourAnswerToTheQuestion