Matematyka dyskretna - 7.Drzewa



Podobne dokumenty
7. Teoria drzew - spinanie i przeszukiwanie

7a. Teoria drzew - kodowanie i dekodowanie

Grafy (3): drzewa. Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków. UTP Bydgoszcz

Drzewa. Jeżeli graf G jest lasem, który ma n wierzchołków i k składowych, to G ma n k krawędzi. Własności drzew

Graf. Definicja marca / 1

Algorytmiczna teoria grafów

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek

Wykłady z Matematyki Dyskretnej

Digraf. 13 maja 2017

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

Ogólne wiadomości o grafach

Matematyka dyskretna

a) 7 b) 19 c) 21 d) 34

Wykład 8. Drzewo rozpinające (minimum spanning tree)

MATEMATYKA DYSKRETNA - MATERIAŁY DO WYKŁADU GRAFY

Matematyczne Podstawy Informatyki

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

TEORETYCZNE PODSTAWY INFORMATYKI

Matematyczne Podstawy Informatyki

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Matematyczne Podstawy Informatyki

6. Wstępne pojęcia teorii grafów

Teoretyczne podstawy informatyki

Wysokość drzewa Głębokość węzła

Algorytm Dijkstry znajdowania najkrótszej ścieżki w grafie

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Wykład 2. Drzewa zbalansowane AVL i 2-3-4

0-0000, , , itd

(4) x (y z) = (x y) (x z), x (y z) = (x y) (x z), (3) x (x y) = x, x (x y) = x, (2) x 0 = x, x 1 = x

Instrukcje dla zawodników

Egzamin, AISDI, I termin, 18 czerwca 2015 r.

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Teoria grafów podstawy. Materiały pomocnicze do wykładu. wykładowca: dr Magdalena Kacprzak

Zad. 1 Zad. 2 Zad. 3 Zad. 4 Zad. 5 SUMA

Algorytmy i Struktury Danych

SPÓJNOŚĆ. ,...v k. }, E={v 1. v k. i v k. ,...,v k-1. }. Wierzchołki v 1. v 2. to końce ścieżki.

MATEMATYKA DYSKRETNA - KOLOKWIUM 2

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Segmentacja obrazów cyfrowych z zastosowaniem teorii grafów - wstęp. autor: Łukasz Chlebda

Algebrą nazywamy strukturę A = (A, {F i : i I }), gdzie A jest zbiorem zwanym uniwersum algebry, zaś F i : A F i

Matematyka dyskretna. Andrzej Łachwa, UJ, /15

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Przypomnij sobie krótki wstęp do teorii grafów przedstawiony na początku semestru.

Sortowanie topologiczne skierowanych grafów acyklicznych

ALGORYTMY I STRUKTURY DANYCH

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Minimalne drzewa rozpinające

Algorytmy i struktury danych. Drzewa: BST, kopce. Letnie Warsztaty Matematyczno-Informatyczne

ALGORYTMY I STRUKTURY DANYCH

Teoretyczne podstawy informatyki

Drzewa rozpinajace, zbiory rozłaczne, czas zamortyzowany

Każdy węzeł w drzewie posiada 3 pola: klucz, adres prawego potomka i adres lewego potomka. Pola zawierające adresy mogą być puste.

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Algorytmy Równoległe i Rozproszone Część V - Model PRAM II

Teoria grafów dla małolatów. Andrzej Przemysław Urbański Instytut Informatyki Politechnika Poznańska

WSTĘP DO INFORMATYKI. Drzewa i struktury drzewiaste

Poprawność semantyczna

Matematyka dyskretna - 8. Egzaminy próbne. Uwaga! Niektórych z tych zadań nie obejmuje program dla studiów zaocznych - proszę się tym nie niepokoić -

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Matematyka dyskretna. Andrzej Łachwa, UJ, B/14

Rekurencja. Przykład. Rozważmy ciąg

Drzewa podstawowe poj

Podstawowe własności grafów. Wykład 3. Własności grafów

Drzewa poszukiwań binarnych

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

KURS MATEMATYKA DYSKRETNA

Podstawowe pojęcia dotyczące drzew Podstawowe pojęcia dotyczące grafów Przykłady drzew i grafów

Matematyka dyskretna. Andrzej Łachwa, UJ, /14

Programowanie obiektowe

Drzewo binarne BST. LABORKA Piotr Ciskowski

E: Rekonstrukcja ewolucji. Algorytmy filogenetyczne

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

KODY SYMBOLI. Kod Shannona-Fano. Algorytm S-F. Przykład S-F

Metody Kompilacji Wykład 3

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2014/2015. Drzewa BST c.d., równoważenie drzew, kopce.

UNIWERSYTET GDAŃSKI MATERIAŁY DYDAKTYCZNE DO PRZEDMIOTU MATEMATYKA DYSKRETNA. pod redakcją: Hanna Furmańczyk Karol Horodecki Paweł Żyliński

Programowanie obiektowe

Podstawy Informatyki. Metody dostępu do danych

Algorytmiczna teoria grafów

TEORETYCZNE PODSTAWY INFORMATYKI

dodatkowe operacje dla kopca binarnego: typu min oraz typu max:

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Wykład 8. Drzewa AVL i 2-3-4

< K (2) = ( Adams, John ), P (2) = adres bloku 2 > < K (1) = ( Aaron, Ed ), P (1) = adres bloku 1 >

Podstawy Informatyki. Wykład 6. Struktury danych

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Algorytmy i struktury danych Laboratorium 7. 2 Drzewa poszukiwań binarnych

PLAN WYKŁADU BAZY DANYCH INDEKSY - DEFINICJE. Indeksy jednopoziomowe Indeksy wielopoziomowe Indeksy z użyciem B-drzew i B + -drzew

Problemy Decyzyjne dla Systemów Nieskończonych

Wstęp do programowania

Kompresja bezstratna. Entropia. Kod Huffmana

Kolorowanie wierzchołków Kolorowanie krawędzi Kolorowanie regionów i map. Wykład 8. Kolorowanie

Matematyka dyskretna - 5.Grafy.

Sortowanie - wybrane algorytmy

Łyżwy - omówienie zadania

Wyszukiwanie binarne

Sortowanie bąbelkowe

Nierówność Krafta-McMillana, Kodowanie Huffmana

Transkrypt:

Matematyka dyskretna - 7.Drzewa W tym rozdziale zajmiemy się drzewami: specjalnym przypadkiem grafów. Są one szczególnie przydatne do przechowywania informacji, umożliwiającego szybki dostęp do nich. Definicja 1. Las to graf prosty, acykliczny. Definicja 2. Drzewo to graf prosty, spójny, acykliczny (czyli spójny las). Wierzchołki drzewa nazywamy węzłami. Podgraf spójny drzewa nazywamy poddrzewem. Twierdzenie 1. Dla grafu T = (V, E) następujące warunki są równoważne: 1. T jest drzewem. 2. T nie zawiera cykli i ma V 1 krawędzi. 3. T jest spójny i ma V 1 krawędzi. 4. T jest spójny i każda jego krawędź jest mostem. 5. Dowolne dwa wierzchołki grafu są połączone dokładnie jedną drogą prostą. 6. T nie zawiera cykli, lecz dodanie dowolnej nowej krawędzi tworzy dokładnie jeden cykl. Definicja 3. Drzewem spinającym (rozpinającym) grafu G nazywamy podgraf G zawierający wszystkie jego wierzchołki i będący drzewem. Łatwo zauważyć, że drzewo spinające jest minimalnym (ze względu na inkluzję krawędzi) podgrafem spójnym łączącym wszystkie wierzchołki grafu G. Dlatego wyznaczanie drzew spinających jest przydatne, gdy wierzchołki grafu symbolizują cele, jakie chcemy osiągnąć. Przykłady Twierdzenie 2. Każdy skończony graf ma drzewo spinające wtedy i tylko wtedy, gdy jest spójny. Algorytm 1. SPINANIE(v): Dane: v - wierzchołek skończonego grafu spójnego G. Zmienne: E - zbiór krawędzi, V - zbiór wierzchołków. I. Niech V := {v}, E :=. II. Dopóki istnieją w grafie G krawędzie łączące wierzchołki ze zbioru V z wierzchołkami, które nie należą do V : wybierz krawędź uw łączącą wierzchołek u V z wierzchołkiem w / V, dołącz w do V i dołącz uw do E. Rezultat: E to zbiór krawędzi drzewa spinającego grafu G. Powyższego algorytmu można użyć również jako testu spójności grafu G. Graf jest spójny wtedy i tylko wtedy, gdy po zakończeniu działania algorytmu SPINANIE(v), V = V (G). Czas działania tego algorytmu to O( V (G) + E(G) ). Przykład (dla sieci) Minimalna konieczna infrastruktura, broadcasting. Często potrzebne jest znajdowanie w grafie z wagami tzw. minimalnego drzewa spinającego tj. takiego, że jego waga (suma wag jego krawędzi) jest nie większa niż waga jakiegokolwiek innego drzewa spinającego. Na szczęście, działają tutaj dwa dość proste algorytmy zachłanne: algorytm Kruskala i algorytm Prima. Algorytm 2. KRUSKAL: Dane: G - skończony graf spójny z wagami, którego krawędzie są uporządkowane wg wzrastających wag e 1,..., e n, n = E(G). Zmienne: E - zbiór krawędzi. I. Podstaw E :=. II. Dla j = 1 do n wykonuj: jeśli graf E {e j } jest acykliczny, dołącz e j do E. Rezultat: E to zbiór krawędzi minimalnego drzewa spinającego G. 1

2 Wadą tego algorytmu jest to, że przed jego zastosowaniem musimy jakoś uporządkować krawędzie według wzrastających wag. Jednakże, nawet razem z tym uporządkowaniem, algorytm Kruskala zajmuje tylko O( E(G) log E(G) ) czasu. Problemem może być jedynie sytuacja, gdy na początku tego uporządkowania nie da się uzyskać (np. dane o wagach uzyskujemy w miarę tworzenia się naszego drzewa). Warto zauważyć, że działa on poprawnie, nawet jeśli graf G ma pętle i krawędzie wielokrotne. Nie trzeba nawet zakładać spójności - jednak wtedy znajdziemy nie drzewo, a las spinający. Drugi z algorytmów nie wymaga uprzedniego posortowania krawędzi według wag i można go użyć w sytuacjach, gdy algorytm Kruskala nie działa: Algorytm 3. PRIM: Dane: G - skończony graf spójny z wagami. Zmienne: E - zbiór krawędzi, V - zbiór wierzchołków. I. Podstaw E :=. II. Wybierz w - dowolny wierzchołek ze zbioru V (G) i niech V := {w}. III. Dopóki V = V (G) wykonuj: wybierz w zbiorze E(G) krawędź uv o najmniejszej możliwej wadze, taką, że u V i v V (G) V, a następnie dołącz krawędź uv do zbioru E i wierzchołek v do zbioru V. Rezultat: E to zbiór krawędzi minimalnego drzewa spinającego G. Algorytm Prima da się zaimplementować w czasie O(n 2 ), gdy graf ma n wierzchołków. Zatem, dla grafów o małej liczbie krawędzi szybszy może być algorytm Kruskala, ale jeśli krawędzi jest wiele, szybszy będzie algorytm Prima (dlaczego?). Pętle i krawędzie wielokrotne nie psują algorytmu Prima, jednak jeśli graf jest niespójny i chcemy uzyskać spinający las, to trzeba ten algorytm nieco zmodyfikować (ćwiczenie). Definicja 4. Drzewo z wyróżnionym korzeniem jest to drzewo z wyróżnionym jednym wierzchołkiem, nazywanym korzeniem. Z niewiadomych przyczyn, drzewa z wyróżnionym korzeniem rysuje się tak, by korzeń był na samej górze. Czasem interpretuje się je jako graf skierowany, wtedy strzałki idą w dół. Definicja 5. Liść drzewa to wierzchołek stopnia 1, który nie jest wyróżniony jako korzeń. Definicja 6. Jeśli para (v, w) jest krawędzią drzewa z wyróżnionym korzeniem, to v jest rodzicem w, a w jest dzieckiem v. Ogólniej, w jest potomkiem v, jeśli w = v i v jest wierzchołkiem jedynej drogi prostej z korzenia do wierzchołka w. v nazywamy wtedy przodkiem w. Definicja 7. Poziomem wierzchołka v nazywamy długość jedynej drogi prostej od korzenia do v. Wysokość drzewa z wyróżnionym korzeniem to największy możliwy poziom wierzchołka tego drzewa. Definicja 8. Poddrzewo o korzeniu v jest to drzewo T v, składające się z korzenia v, wszystkich jego potomków i wszystkich krawędzi (potencjalnie skierowanych) łączących ich. Drzewa (zwłaszcza z korzeniem) są szczególnie często stosowanymi w informatyce grafami, tworząc np. wygodne struktury baz danych. Przykłady Struktura uczelni, stuktura katalogów, drzewo genealogiczne, drzewkowy zapis algorytmu postępowania. Definicja 9. Drzewo binarne jest to drzewo z wyróżnionym korzeniem, w którym każdy węzeł ma co najwyżej dwoje dzieci, wśród których wyróżniamy dzieci prawe i lewe. Przykład Łatwa do przeszukiwania alfabetyczna baza danych.

Definicja 10. Drzewo poszukiwań binarnych (przykład drzewa z wyróżnionym korzeniem) jest to drzewo binarne składające się z węzłów z etykietami (węzłów indeksowanych zbiorem uporządkowanym), w którym lewe poddrzewo każdego węzła zawiera wyłącznie węzły o etykietach nie większych niż etykieta węzła a prawe poddrzewo zawiera wyłącznie węzły o etykietach nie mniejszych niż etykieta węzła. W ten sposób tworzy się bazy danych, których etykiety są np. liczbami lub słowami (uporządkowanymi alfabetycznie), i które bardzo szybko można przeszukać i znaleźć dany węzeł. Algorytm przeszukiwania drzewa poszukiwań binarnych jest przykładem algorytmu rekurencyjnego: Algorytm 4. PRZESZUKIWANIE(v,x): Dane: Drzewo poszukiwań binarnych z korzeniem v, x - poszukiwana wartość etykiety. Zmienne: w - węzeł. I. Podstawiamy w = v. II. Porównujemy etykietę w i x. Jeśli etykiety są równe: STOP. III. Jeśli etykieta v jest większa od x, to w := lewe dziecko v i przechodzimy do kroku V. IV. Jeśli etykieta v jest mniejsza od x, to w := prawe dziecko v i przechodzimy do kroku V. V. Wykonujemy PRZESZUKIWANIE(w,x). Rezultat: w to węzeł o etykiecie x. W zależności od tego, jak dobrze jest to drzewo skonstruowane (wyważone) czas działania tego algorytmu wynosi od O(log n) do O(n). Ćwiczenie Wypisać algorytmy: 1) Znajdowania największego/najmniejszego elementu w drzewie poszukiwań binarnych. 2) Znajdowania poprzednika/następnika danego elementu w drzewie poszukiwań binarnych. 3) Wstawiania nowego elementu/usuwania jednego z elementów, by nie zaburzyć struktury tego drzewa. Uogólnienie drzewa poszukiwań binarnych: Definicja 11. Jeśli dla każdego węzła drzewa z wyróżnionym korzeniem jego dzieci są uporządkowane tj. wiemy które z nich występuje wcześniej, a które później w jakimś ustalonym porządku, to mówimy, że drzewo jest uporządkowane. Na rysunku, tak uporządkowane dzieci rysujemy od strony lewej do prawej. Kolejność dzieci u i v zapisujemy u < v, nawet jeśli nie są one liczbami. Przykład Porządek alfabetyczny. Przykład Problem: zapamiętywanie drzewa przez komputer. Algorytm przechodzenia drzewa to taki, który ustawia w ciąg wszystkie wierzchołki skończonego uporządkowanego drzewa z wyróżnionym korzeniem. Trzy najbardziej popularne takie algorytmy to PREORDER, POSTORDER i INORDER (ten trzeci działa tylko dla drzew binarnych). Definicja 12. Porządek prefiksowy drzewa z wyróżnionym korzeniem to takie uporządkowanie wierzchołków, w którym korzeń drzewa umieszczamy na początku listy, a dalej znajdują się poddrzewa uporządkowane w kolejności swoich korzeni (rysunkowo: kolejność od lewej do prawej). Innymi słowy, dzieci w tym porządku pojawiają się po rodzicach. Tworzy się go algorytmem PREORDER. Przykład Algorytm 5. PREORDER(v): Dane: skończone, uporządkowane drzewo z wyróżnionym korzeniem v. Zmienne: L(v) - lista wierzchołków drzewa, w-węzeł. I. Umieść v na liście L(v). 3

4 II. Dla każdego w - dziecka v (idąc od lewej do prawej) wykonaj: PREORDER(w) {otrzymujemy w ten sposób listę L(w) złożoną z wierzchołka w i jego potomków}, a następnie dołącz otrzymaną listę L(w) na końcu listy L(v). Rezultat: L(v) - lista wierzchołków drzewa, na której rodzice znajdują się zawsze przed swoimi dziećmi (czyli w porządku prefiksowym). Definicja 13. Porządek postfiksowy drzewa z wyróżnionym korzeniem to takie uporządkowanie wierzchołków, w którym poddrzewa są umieszczone najpierw (rysunkowo: kolejność od lewej do prawej), a potem dopiero korzeń. Innymi słowy, dzieci w tym porządku pojawiają się przed rodzicami. Tworzy się go algorytmem POSTORDER. Przykład Algorytm 6. POSTORDER(v): Dane: skończone, uporządkowane drzewo z wyróżnionym korzeniem v. Zmienne: L(v) - lista wierzchołków drzewa, w-węzeł. I. Niech L(v) = (pusta lista). II. Dla każdego w - dziecka v (idąc od lewej do prawej) wykonaj: POSTORDER(w) {otrzymujemy w ten sposób listę L(w) złożoną z wierzchołka w i jego potomków}, a następnie dołącz otrzymaną listę L(w) na końcu listy L(v). III. Dołącz wierzchołek v na końcu listy L(v). Rezultat: L(v) - lista wierzchołków drzewa, na której rodzice znajdują się zawsze po swoich dzieciach (czyli w porządku postfiksowym). Trzeci sposób przechodzenia drzewa dotyczy tylko uporządkowanych drzew binarnych z wyróżnionym korzeniem. Definicja 14. Porządek infiksowy drzewa binarnego z wyróżnionym korzeniem to takie uporządkowanie wierzchołków, w którym dany korzeń jest umieszczony pomiędzy wierzchołkami poddrzewa, którego korzeniem jest jego lewe dziecko, a wierzchołkami poddrzewa, którego korzeniem jest jego prawe dziecko. Innymi słowy, lewe dzieci w tym porządku pojawiają się przed rodzicami, a prawe po nich. Tworzy się go algorytmem INORDER. Algorytm 7. INORDER(v): Dane: skończone, uporządkowane drzewo binarne z wyróżnionym korzeniem v. Zmienne: L(v) - lista wierzchołków drzewa, u, w-węzły. I. Niech L(v) = (pusta lista). II. Jeśli wierzchołek v ma lewe dziecko w, wykonaj: INORDER(w) {otrzymujemy w ten sposób listę L(w) złożoną z wierzchołka w i jego potomków}, a następnie dołącz otrzymaną listę L(w) na końcu listy L(v). III. Dołącz v na koniec listy L(v). IV. Jeśli wierzchołek v ma prawe dziecko u, wykonaj: INORDER(u) {otrzymujemy w ten sposób listę L(u) złożoną z wierzchołka u i jego potomków}, a następnie dołącz otrzymaną listę L(u) na końcu listy L(v) Rezultat: L(v) - lista wierzchołków drzewa, na której lewe dzieci znajdują się przed rodzicami, a prawe - za nimi (czyli w porządku infiksowym). Warto zwrócić uwagę, że algorytm działa również jeśli niektórzy rodzice mają tylko jedno dziecko. Czas działania wszystkich trzech algorytmów to O( V ), gdzie V jest zbiorem wierzchołków drzewa. Wiemy już, jak można zakodować drzewo z wyróżnionym korzeniem. Jednak, czy z odkodowaniem pójdzie tak łatwo? To znaczy, czy możemy odtworzyć drzewo mając daną tylko kolejność wierzchołków? Na ogół odpowiedź jest przecząca. Przykłady. Jeśli jednak tak jest, jaki sens ma kodowanie drzewa? Otóż, w pewnych istotnych przypadkach, da się drzewo odtworzyć.

Twierdzenie 3. Niech T będzie skończonym, uporządkowanym drzewem z wyróżnionym korzeniem, którego wierzchołki są wypisane w porządku prefiksowym lub postfiksowym. Przypuśćmy, że znana jest liczba dzieci każdego wierzchołka. Wtedy to drzewo jest wyznaczone jednoznacznie i może być odtworzone z ciągu wierzchołków. Niestety, nie da się uzyskać takiego wyniku dla porządku infiksowego (przykład), dlatego ten jest mniej używany w komputerowych strukturach danych. Poniższe algorytmy odkodowują drzewa zadane w porządku prefiksowym i postfiksowym: Algorytm 8. DEPRE(v 1,... v n, c 1,... c n ): Dane: v 1,... v n - ciąg wierzchołków drzewa T w porządku prefiksowym, c 1,... c n - ciąg liczb dzieci tych wierzchołków. Zmienne: i, j - liczniki pętli wierzchołków. S(v i ) - zbiory wierzchołków, U(v i ) - liczby całkowite. I. Dla każdego i podstawiamy U(v i ) := c i, S(v i ) =. Następnie i := 1. II. Dopóki i n wykonujemy: Znajdujemy maksymalne możliwe j < i, takie, że U(v j ) = 0. Wtedy U(v j ) := U(v j ) 1, S(v j ) := S(v j ) {v i }, i := i + 1. Rezultat: S(v i ) - ciąg zbiorów, zawierających wierzchołki będące dziećmi kolejnych węzłów v i. Algorytm 9. DEPOST(v 1,... v n, c 1,... c n ): Dane: v 1,... v n - ciąg wierzchołków drzewa T w porządku postfiksowym, c 1,... c n - ciąg liczb dzieci tych wierzchołków. Zmienne: i - licznik pętli wierzchołków. S(v i ) - zbiory wierzchołków, U(v i )- ciągi wierzchołków. Po kolei, dla każdego i = 1, 2,..., n definiujemy: a) Jeśli c i = 0, to S(v i ) =, a U(v i ) jest dowolne. b) Ib. Jeśli c i = 0 to U(v i ) = {v k : k < i} k<i S(v i) (uporządkowany w kolejności danych wejściowych). Wtedy definiujemy S(v i ) jako c i ostatnich elementów ciągu U(v i ). Rezultat: S(v i ) - ciąg zbiorów, zawierających wierzchołki będące dziećmi kolejnych węzłów v i. Z tego już łatwo można odtworzyć drzewo Przykłady 5