Byłem kodowania się kilka różnych implementacjach binarne drzewo poszukiwań niedawno (AVL, splay, treap) i jestem ciekaw, czy jest jakiś szczególnie „dobry” sposób pisać iterator do przechodzenia tych struktur. Rozwiązanie Użyłem teraz ma mieć każdy węzeł w wskaźników sklepowych BST do następnych i poprzednich elementów w drzewie, co zmniejsza iteracji do standardowego linkowane listy iteracji. Jednak nie jestem zadowolony z tej odpowiedzi. Zwiększa wykorzystanie miejsca w każdym węźle przez najbliższe dwa wskaźniki (i wcześniejszych), w pewnym sensie to jest po prostu oszustwo.
Znam sposób budowania przeszukiwania binarnego drzewa iterator, który używa O (h) pomocniczy przestrzeni składowania (gdzie h jest wysokością drzewa) za pomocą stosu śledzić węzłów granicznych zbadać później, ale jestem ve opór kodowanie to się ze względu na zużycie pamięci. Miałem nadzieję, że istnieje jakiś sposób, aby zbudować iterator, który używa tylko stałą przestrzeń.
To jest moje pytanie - czy jest jakiś sposób, aby zaprojektować iterator nad wyszukiwania binarnego drzewa z następujących właściwości?
- Elementy są odwiedzane w kolejności rosnącej (czyli przejścia Inorder)
next()ihasNext()zapytań uruchomić w O (1) czasu.- Wykorzystanie pamięci O (1)
Żeby było łatwiej, to jest w porządku, jeśli przyjąć, że struktura drzewa nie zmienia kształtu podczas iteracji (to znaczy nie insercje, delecje, lub obroty), ale byłoby naprawdę super, gdyby nie było to rozwiązanie, które rzeczywiście może sobie z tym poradzić.













