Drzewo wielokierunkowe - wnuki

0

Witam.
Mógłby mi ktoś doradzić, jak napisać taką procedurę:

Wyświetlić w drzewie wielokierunkowym wszystkich wnuków (trzeci rząd).

Tak więc teraz. Definiuję sobie typ drzewa wielokierunkowego, powiedzmy że daną będzie integer.

type wskaznik = ^drzewo;
drzewo = record
dana : integer
rodzenstwo: drzewo;
potomstwo: drzewo;
end;
var wsk: wskaznik;

"rodzenstwo" jest wskaźnikiem do węzła na tym samym poziomie, a "potomstwo" do potomka.
Aby wypisać potomków bezpośrednich użyłbym chyba takiej procedury:

procedure potomek(w: wskaznik);
begin
w := w^.potomstwo;
while  w <> nil do begin
write(w^.dana);
w:=w^.rodzenstwo;
end;
end;

I tutaj mam wątpliwości jak wypisać wszystkich wnuków danego węzła. Czyli trzeba przejść po kolei po potomstwie potomstwa? I potrzebna będzie tutaj rekurencja?

0

rodzenstwo: drzewo;

"rodzenstwo" jest wskaźnikiem
Chrzani waść.

0

Rzeczywiście, powinno być:

type wskaznik = ^drzewo;
drzewo = record
dana : integer
rodzenstwo: wskaznik;
potomstwo: wskaznik;
end;
var wsk: wskaznik;

Pisałem to tutaj bez testowania w kompilatorze, więc tak wyszło.

0

Funkcja wnuk, która wygląda dokładnie jak potomek tylko że zamiast write(w^.dana); wywołuje potomek(w);

0

Dziękuję za pomoc.
Czyli tak jak myślałem, że będzie tutaj potrzebne wywołanie rekurencyjne, ale nie wiedziałem czy tak jest w rzeczywistości, bo w polskich źródłach nie znalazłem wiele na temat drzew wielokierunkowych. Nawet w "Algorytmy + struktury danych = programy" była tylko deklaracja typu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1