Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przechodzenie drzewa bez rekurencji :c

Ostatnio zmodyfikowano 2017-06-04 23:56
Autor Wiadomość
witeks44
Temat założony przez niniejszego użytkownika
Przechodzenie drzewa bez rekurencji :c
» 2017-06-03 01:35:50
Cześć wszystkim, mam do przygotowania funkcje inorder, postorder oraz preorder na drzewku BST bez używania rekurencji. Jedyną podpowiedzią, jaką otrzymałem jest użycie stosu, jednak czy nie dało by się tego zrobić bez używania jego? Mowa o strukturze drzewa ze wskaźnikami na lewego i prawego syna. Choć może mając jeszcze wskaźnik na ojca byłoby łatwiej to zrobić? Jakieś porady co do tego?
P-162009
garlonicon
» 2017-06-03 09:34:56
czy nie dało by się tego zrobić bez używania jego?
Zawsze się da, ale tutaj chyba łatwiej użyć stosu. Zrób to tak, jak robi to kompilator:
1. Zarezerwuj na stosie miejsce na zwracaną wartość (jeśli funkcja ma coś zwracać).
2. Włóż argumenty na stos.
3. Dopóki jest coś do obliczenia:
3.1. Wykonaj jeden krok obliczeń.
3.2. Zmodyfikuj zwracaną wartość oraz argumenty.
3.3. Wróć do punktu 3.
4. Zwróć wynik zdjęty ze stosu.
Jeśli jest taka potrzeba, możesz wkładać więcej ramek funkcji na stos, byleby nie było ich aż tyle, co w tradycyjnej wersji rekurencyjnej, bo wtedy dojdzie do przepełnienia stosu (co będziesz mógł sam obejrzeć, jeśli ustalisz jakiś maksymalny rozmiar stosu i wypiszesz sobie jego zawartość w poszczególnych momentach).
P-162011
Monika90
» 2017-06-03 16:15:05
Na stosie wystarczy przechowywać wskaźniki do rodziców. Z tego wynika że jeżeli wskaźniki do rodziców będziemy trzymać w samych węzłach, to ten stos nie będzie potrzebny.

Dodam, że w C++ zamiast pisania trzech funkcji (pre, in i postorder) można napisać jeden szablon funkcji, który obsłuży wszystkie przypadki.
P-162026
witeks44
Temat założony przez niniejszego użytkownika
» 2017-06-04 23:56:19
Dziękuję za pomoc :D sprawa się dla mnie trochę komplikowała bo chciałem to przekombinować i robić osobną strukturę na stos i osobną na drzewo, kiedy wystarczyło zrobić zwykłą tablicę działającą jak stos :D temat zamykam, problem mniej więcej rozwiązany, jeszcze raz dzięki serdeczne :D
P-162068
« 1 »
  Strona 1 z 1