Grafy (3): drzewa Wykłady z matematyki dyskretnej dla informatyków i teleinformatyków UTP Bydgoszcz 13 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 1 / 107
Drzewo Definicja. Drzewo to graf acykliczny i spójny. Wniosek. Drzewo nie ma pętli i nie ma krawędzi wielokrotnych. Przykład. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 2 / 107
Las Definicja. Las to graf acykliczny. Wniosek. Spójne składowe lasu to drzewa. Przykład. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 3 / 107
Jeszcze kilka definicji Liść drzewa to wierzchołek o stopniu 1. Przykład. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 4 / 107
Liście Fakt. Każde drzewo skończone o co najmniej jednej krawędzi ma co najmniej dwa liście. Uzasadnienie. Niech w 1... w m będzie najdłuższą drogą acykliczną w drzewie. Wtedy wierzchołki w 1 oraz w m są liśćmi: oczywiście w 1 w m (droga jest acykliczna) i mają stopień 1 (gdyby nie, to istniałaby droga dłuższa od w 1... w m ). (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 5 / 107
Drzewa Twierdzenie. Drzewo mające n wierzchołków ma n 1 krawędzi. Dowód indukcyjny. Dla n = 2 drzewo ma tylko jedną krawędź. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 6 / 107
Drzewo mające n wierzchołków ma n 1 krawędzi Załóżmy, że dla n > 2 każde drzewo mające n wierzchołków ma n 1 krawędzi. Niech T będzie drzewem o n + 1 wierzchołkach. Z poprzedniego faktu wiemy, że T ma liść. Jeśli usuniemy z T wierzchołek będący liściem i usuniemy krawędź wychodzącą z tego wierzchołka, to otrzymamy drzewo o n wierzchołkach. Z założenia indukcyjnego ten graf ma n 1 krawędzi, więc T ma n krawędzi. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 7 / 107
Drzewa spinające Fakt. Jeśli G jest grafem spójnym i jeśli D jest minimalnym podrafem w G łączącym wszystkie wierzchołki, to D jest acykliczny (czyli jest drzewem). Uzasadnienie. Gdyby D zawierał cykl, to usuwając jedną krawędź tego cyklu nadal dostaniemy podraf łączący wszystkie wierzchołki G, co jest sprzeczne z minimalnością G. Definicja. Drzewem spinającym D grafu G jest drzewo zawierające wszystkie wierzchołki tego grafu. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 8 / 107
Drzewa spinające Przykład. Graf i jedno z setek drzew spinających tego grafu. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 9 / 107
Drzewo spinające Twierdzenie. Każdy graf spójny ma przynajmniej jedno drzewo spinające. Dowód. Graf G jest spójny. Niech H będzie podgrafem spójnym, który zawiera wszystkie wierzchołki G i możliwie najmniejszą liczbę krawędzi. Gdyby H zawierał cykl, to usuwając jedną krawędź tego cyklu nadal dostaniemy podraf spójny łączący wszystkie wierzchołki G, co jest sprzeczne z minimalnością H. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 10 / 107
Algorytm DRZEWO(v) Jeśli graf G jest spójny, to algorytm znajdzie drzewo spinające. Jeśli G nie jest spójny, to algorytm znajdzie drzewo spinające spójnej składowej grafu G zawierającej wierzchołek v. Na wejściu: wierzchołek v grafu G. Na wyjściu: zbiór krawędzi E drzewa spinającego. Zmienna pomocnicza: ciąg V odwiedzanych wierzchołków. Niech V := {v} oraz E :=. Dopóki istnieje krawędź w G łącząca wierzchołek z V z wierzchołkiem spoza V, to wybierz taką krawędź łączącą u V z w / V. Dołącz w do V oraz krawędź {u, v} do E. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 11 / 107
Przykład, algorytm DRZEWO(1) 6 7 8 6 7 8 3 4 5 3 4 5 1 2 1 2 V := {1}; E :=. Wybierz krawędź {1, 2}. V := {1, 2}; E := {{1, 2}}. Wybierz krawędź {1, 3}. V := {1, 2, 3}; E := {{1, 2}, {1, 3}}. Wybierz krawędź {1, 4}. V := {1, 2, 3, 4}; E := {{1, 2}, {1, 3}, {1, 4}}. Wybierz krawędź {2, 5}. V := {1, 2, 3, 4, 5}; E := {{1, 2}, {1, 3}, {1, 4}, {2, 5}}. Wybierz krawędź {3, 6}. V := {1, 2, 3, 4, 5, 6}; E := {{1, 2}, {1, 3}, {1, 4}, {2, 5}, {3, 6}}. Wybierz krawędź {4, 7}. V := {1, 2, 3, 4, 5, 6, 7}; E := {{1, 2}, {1, 3}, {1, 4}, {2, 5}, {3, 6}, {4, 7}}. Wybierz krawędź {5, 8}. V := {1, 2, 3, 4, 5, 6, 7, 8}; E := {{1, 2}, {1, 3}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {5, 8}}. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 12 / 107
Przykład, algorytm DRZEWO(2) 1 3 6 1 3 6 2 4 9 2 4 9 5 7 8 5 7 8 V := {2}; E :=. Wybierz krawędź {2, 4}. V := {2, 4}; E := {{2, 4}}. Wybierz krawędź {4, 6}. V := {2, 4, 6}; E := {{2, 4}, {4, 6}}. Wybierz krawędź {6, 9}. V := {2, 4, 6, 9}; E := {{2, 4}, {4, 6}, {6, 9}}. Wybierz krawędź {9, 8}. V := {2, 4, 6, 9, 8}; E := {{2, 4}, {4, 6}, {6, 9}, {9, 8}}. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 13 / 107
Przykład, algorytm DRZEWO(3) 1 3 6 1 3 6 2 4 9 2 4 9 5 7 8 5 7 8 V := {3}; E :=. Wybierz krawędź {3, 1}. V := {3, 1}; E := {{3, 1}}. Wybierz krawędź {1, 5}. V := {3, 1, 5}; E := {{3, 1}, {1, 5}}. Wybierz krawędź {3, 7}. V := {3, 1, 5, 7}; E := {{3, 1}, {1, 5}, {3, 7}}. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 14 / 107
Algorytm LAS Na wejściu: graf G(V G, E G ) (skończony). Na wyjściu: zbiór krawędzi EE lasu spinającego. Niech VV := oraz EE :=. Dopóki VV V G wykonaj: wybierz v V G \ VV wykonaj DRZEWO(v) otrzymując zbiór wierzchołków V i zbiór krawędzi E drzewa spinającego tej składowej spójnej grafu, która zawiera v dołącz wierzchołki z V do VV oraz krawędzie z E do EE (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 15 / 107
Przykład, algorytm LAS 6 7 8 6 7 8 3 4 5 3 4 5 1 2 1 2 VV := {1}; EE :=. Wybierz 1 V G \ VV. Wykonaj DRZEWO(1). V := {1, 2, 3, 4, 5, 6, 7, 8} E := {{1, 2}, {1, 3}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {5, 8}}. Dołącz wierzchołki z V do VV oraz krawędzie z E do EE VV := {1, 2, 3, 4, 5, 6, 7, 8} EE := {{1, 2}, {1, 3}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {5, 8}}. VV = V G ; zakończ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 16 / 107
Przykład, algorytm LAS 1 3 6 1 3 6 2 4 9 2 4 9 5 7 8 5 7 8 VV := ; EE :=. Wybierz 2 V G \ VV. Wykonaj DRZEWO(2). V := {2, 4, 6, 9, 8} E := {{2, 4}, {4, 6}, {6, 9}, {9, 8}}. Dołącz wierzchołki z V do VV oraz krawędzie z E do EE VV := {2, 4, 6, 9, 8} EE := {{2, 4}, {4, 6}, {6, 9}, {9, 8}}. VV V G ; aa aa (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 17 / 107
Przykład, algorytm LAS, ciąg dalszy 1 3 6 1 3 6 2 4 9 2 4 9 5 7 8 5 7 8 VV := {2, 4, 6, 8, 9} EE := {{2, 4}, {4, 6}, {6, 9}, {9, 8}}. VV V G ; wybierz 3 V G \ VV. Wykonaj DRZEWO(3). V := {3, 1, 5, 7}; E := {{3, 1}, {1, 5}, {3, 7}}. Dołącz wierzchołki z V do VV oraz krawędzie z E do EE VV := {2, 4, 6, 9, 8, 1, 3, 5, 7} EE := {{2, 4}, {4, 6}, {6, 9}, {9, 8}, {3, 1}, {1, 5}, {3, 7}}. VV = V G ; zakończ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 18 / 107
Korzeń Definicja. Drzewo z wyróżnionym korzeniem to drzewo, w którym wyróżniamy jeden z wierzchołków, nazywany korzeniem. Przykład. Często korzeń rysujemy na górze. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 19 / 107
Drzewo poszukiwań binarnych Obserwacja. Zestaw słów, ciąg liczb, czy inny zbiór z ustalonym porządkiem można przedstawić w postaci drzewa z wyróżnionym korzeniem zwanego drzewem poszukiwań binarnych. W takim drzewie każdy wierzchołek jest co najwyżej trzeciego stopnia. (Precyzyjniejsza definicja pojawi się za cztery slajdy.) (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 20 / 107
Drzewo poszukiwań binarnych Przykład. Etykieta każdego wierzchołka jest (w porządku alfabetycznym) dalsza niż sąsiedniego wierzchołka lewego-dolnego, a bliższa niż sąsiedniego wierzchołka dolnego-prawego. Ponadto w tym przykładzie na każdym poziomie etykieta z lewej strony jest wcześniejsza od etykiety po prawej. ja ga on be gu my wy dr ir ty (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 21 / 107
Drzewo genealogiczne Niech T będzie drzewem z wyróżnionym korzeniem k. Umownie potraktujmy T jak graf skierowany (zwrot strzałek określa grawitacja ). Przyjmijmy, że jeśli para (u, v) jest krawędzią tego drzewa, to wierzchołek u leży bliżej k niż wierzchołek v. Definicja. Jeśli para (u, v) jest krawędzią drzewa T, to U jest rodzicem v, natomiast v jest dzieckiem u. Ponadto, w jest potomkiem u, jeśli w u oraz u jest jakimś wierzchołkiem jedynej drogi prostej z korzenia do wierczhołka w. Definicja. Jeśli v jest wierzchołkiem, to poddrzewo Y v o korzeniu v jest drzewem składającym się z v, z wszystkich jego potomków oraz wszystkich krawędzi łączących te wierzchołki. Fakt. Każdy wierzchołek (z wyjątkiem korzenia) ma dokładnie jednego rodzica. Rodzic może mieć więcej niż jedno dziecko. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 22 / 107
Poddrzewa Przykład. Drzewo i jego niejednowierzchołkowe poddrzewa. ja ga on ga on be gu my wy be gu my wy gu wy dr ir ty dr ir ty dr ir ty (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 23 / 107
Drzewo binarne Definicja. Drzewo binarne to drzewo z wyróżnionym korzeniem, w którym każdy wierzchołek (węzeł) ma co najwyżej dwoje dzieci: albo dziecko lewe, albo prawe, albo dwoje dzieci (lewe i prawe), albo nie ma dzieci. Definicja. Drzewo o m rozgałęzieniach (m > 2) to drzewo, w którym każdy rodzic ma co najwyżej m dzieci oznaczanych różnymi liczbami ze zbioru {1, 2,..., m}. Definicja. Drzewo o m rozgałęzieniach (m > 2) lub drzewo binarne (m = 2) jest drzewem regularnym gdy każdy rodzic ma dokładnie m dzieci. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 24 / 107
Wysokość drzewa Definicja. Numer poziomu wierzchołka v to długość jedynej drogi prostej od korzenia do v. Numer korzenia to zero. Definicja. Wysokość drzewa z wyróżnionym korzeniem to największy numer poziomu wierzchołka (długość najdłuższej drogi prostej wychodzącej z korzenia). Definicja. Regularne drzewo o m rozgałęzieniach (m > 2) lub regularne drzewo binarne (m = 2) jest pełnym drzewem o m rozgałęzieniach, jeśli wszystkie liście mają numer poziomu równy wysokości drzewa. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 25 / 107
Przykład, pełne drzewo o trzech rozgałęzieniach i wysokości dwa. Drzewo to ma 13 wierzchołków, 13 = 32+1 1 3 1. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 26 / 107
Drzewo pełne Fakt. Pełne drzewo o m rozgałęzieniach i wysokości h ma wierzchołków. mh+1 1 m 1 Uzasadnienie. Na poziomie pierwszym mamy m wierzchołków (korzeń ma m dzieci). Każy z tych wierzcholków ma m dzieci, więc na poziomie drugim mamy m 2 dzieci,... Sumując, mamy na wszystkich poziomach 1 + m + m 2 + + m h wierzchołków. Stosujemy wzór na sumę h + 1 początkowych wyrazów ciągu geometrycznego: 1 + m + m 2 + + m h = 1 1 mh+1 1 m = mh+1 1 m 1. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 27 / 107
Drzewo pełne Fakt. Pełne drzewo o m rozgałęzieniach i wysokości h ma mh 1 m 1 oraz m h liści. rodziców Przykład. Pełne drzewo o trzech rozgałęzieniach i wysokości dwa ma 4 rodziców i 9 liści. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 28 / 107
Drzewo uporządkowane Definicja. Uporządkowane drzewo z wyróżnionym korzeniem to takie drzewo, w którym uporządkujemy dzieci każdego rodzica (od strony lewej do prawej). Przykład. Przyjmujemy O < R. Graf ten może przedstawiać wyniki powtarzanego rzutu monetą. O R OO OR RO RR OOO OOR ORO ORR ROO ROR RRO RRR (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 29 / 107
Algorytm DRZEWO i LAS Uwaga. Aby sprawdzić, czy graf jest spójny wystarczy sprawdzić, czy algorytm DRZEWO(v) (dla dowolnego wierzchołka v) tworzy drzewo zawierające wszystkie wierzchołki grafu lub, równoważnie, czy algorytm LAS tworzy tylko jedno drzewo. Uwaga. Aby sprawdzić, czy graf G jest acykliczny wystarczy sprawdzić, czy utworzony las spinający jest całym grafem (czy EE = E G ). (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 30 / 107
Algorytmy przeszukiwania w głąb drzewa z wyróżnionym korzeniem Podamy trzy algorytmy rekurencyjne przeszukiwania w głąb (przeszukiwania z nawrotami). Porządek prefiksowy (preorder): korzeń jest pierwszy, rodzice znajdują się przed dziećmi. Porządek postfiksowy (postorder): korzeń jest ostatni, rodzice znajdują się po dzieciach. Porządek inorder w drzewie binarnym: lewe dziecko znajduje się przed swoim rodzicem, a prawe po. W tych trzech algorytmach sposób poruszania się jest taki sam. Startujemy z wierzchołka ( patrzymy w dół ) stosując zasady: trzymaj się prawej, jeśli koniec drogi to zawróć. Inna jest tylko kolejność wpisywania wierzchołków na listę. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 31 / 107
Algorytm PREORDER(v) Na wejściu: uporządkowane skończone drzewo z wyróżnionym korzeniem v. Na wyjściu: lista L(v) wszystkich wierzchołków tego drzewa, na której każdy rodzic jest umieszczony przed swoimi dziećmi. Zapisz v na liście L(v) dla każdego dziecka w wierzchołka v (w porządku od lewej strony do prawej) PREORDER(w) (otrzymamy tu listę złożoną z w i jego potomków) dołącz L(w) na końcu dotychczas uzyskanej listy L(v) Obserwacja. Algorytm ten umieszcza wierzchołek na liście w momencie, gdy odwiedza go po raz pierwszy. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 32 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Wpisz na listę. L( ) =. Weź pierwsze (lewe) dziecko v 2 rodzica. Wpisz v 2 na listę L(v 2 ) = v 2. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. Wpisz v 4 na listę L(v 4 ) = v 4. Wierzchołek v 4 nie ma dzieci. L(v 2 ) = v 2 v 4. Weź kolejne dziecko v 5 rodzica v 2. Wpisz v 5 na listę L(v 5 ) = v 5. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. Wpisz v 9 na listę L(v 9 ) = v 9. Wierzchołek v 9 nie ma dzieci. L(v 5 ) = v 5 v 9. Weź kolejne dziecko 0 rodzica v 5. Wpisz 0 na listę L(0 ) = 0. Wierzchołek 0 nie ma dzieci. L(v 5 ) = v 5 v 9 0. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 33 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Wpisz na listę. L( ) =. Weź pierwsze (lewe) dziecko v 2 rodzica. Wpisz v 2 na listę L(v 2 ) = v 2. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. Wpisz v 4 na listę L(v 4 ) = v 4. Wierzchołek v 4 nie ma dzieci. L(v 2 ) = v 2 v 4. Weź kolejne dziecko v 5 rodzica v 2. Wpisz v 5 na listę L(v 5 ) = v 5. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. Wpisz v 9 na listę L(v 9 ) = v 9. Wierzchołek v 9 nie ma dzieci. L(v 5 ) = v 5 v 9. Weź kolejne dziecko 0 rodzica v 5. Wpisz 0 na listę L(0 ) = 0. Wierzchołek 0 nie ma dzieci. L(v 5 ) = v 5 v 9 0. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 34 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Wpisz na listę. L( ) =. Weź pierwsze (lewe) dziecko v 2 rodzica. Wpisz v 2 na listę L(v 2 ) = v 2. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. Wpisz v 4 na listę L(v 4 ) = v 4. Wierzchołek v 4 nie ma dzieci. L(v 2 ) = v 2 v 4. Weź kolejne dziecko v 5 rodzica v 2. Wpisz v 5 na listę L(v 5 ) = v 5. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. Wpisz v 9 na listę L(v 9 ) = v 9. Wierzchołek v 9 nie ma dzieci. L(v 5 ) = v 5 v 9. Weź kolejne dziecko 0 rodzica v 5. Wpisz 0 na listę L(0 ) = 0. Wierzchołek 0 nie ma dzieci. L(v 5 ) = v 5 v 9 0. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 35 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Wpisz na listę. L( ) =. Weź pierwsze (lewe) dziecko v 2 rodzica. Wpisz v 2 na listę L(v 2 ) = v 2. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. Wpisz v 4 na listę L(v 4 ) = v 4. Wierzchołek v 4 nie ma dzieci. L(v 2 ) = v 2 v 4. Weź kolejne dziecko v 5 rodzica v 2. Wpisz v 5 na listę L(v 5 ) = v 5. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. Wpisz v 9 na listę L(v 9 ) = v 9. Wierzchołek v 9 nie ma dzieci. L(v 5 ) = v 5 v 9. Weź kolejne dziecko 0 rodzica v 5. Wpisz 0 na listę L(0 ) = 0. Wierzchołek 0 nie ma dzieci. L(v 5 ) = v 5 v 9 0. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 36 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Wpisz na listę. L( ) =. Weź pierwsze (lewe) dziecko v 2 rodzica. Wpisz v 2 na listę L(v 2 ) = v 2. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. Wpisz v 4 na listę L(v 4 ) = v 4. Wierzchołek v 4 nie ma dzieci. L(v 2 ) = v 2 v 4. Weź kolejne dziecko v 5 rodzica v 2. Wpisz v 5 na listę L(v 5 ) = v 5. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. Wpisz v 9 na listę L(v 9 ) = v 9. Wierzchołek v 9 nie ma dzieci. L(v 5 ) = v 5 v 9. Weź kolejne dziecko 0 rodzica v 5. Wpisz 0 na listę L(0 ) = 0. Wierzchołek 0 nie ma dzieci. L(v 5 ) = v 5 v 9 0. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 37 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Wpisz na listę. L( ) =. Weź pierwsze (lewe) dziecko v 2 rodzica. Wpisz v 2 na listę L(v 2 ) = v 2. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. Wpisz v 4 na listę L(v 4 ) = v 4. Wierzchołek v 4 nie ma dzieci. L(v 2 ) = v 2 v 4. Weź kolejne dziecko v 5 rodzica v 2. Wpisz v 5 na listę L(v 5 ) = v 5. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. Wpisz v 9 na listę L(v 9 ) = v 9. Wierzchołek v 9 nie ma dzieci. L(v 5 ) = v 5 v 9. Weź kolejne dziecko 0 rodzica v 5. Wpisz 0 na listę L(0 ) = 0. Wierzchołek 0 nie ma dzieci. L(v 5 ) = v 5 v 9 0. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 38 / 107
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L(v 2 ) = v 2 v 4, L(v 5 ) = v 5 v 9 0. Wszyscy potomkowie v 2 zostali uwzględnieni. L(v 2 ) = v 2 v 4 v 5 v 9 0. L( ) = v 2 v 4 v 5 v 9 0. aaa aa aa aa aa(wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 39 / 107
v 9 0 L( ) = v 2 v 4 v 5 v 9 0. Weź kolejne dziecko v 3 rodzica. Wpisz v 3 na listę L(v 3 ) = v 3. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. Wpisz v 6 na listę L(v 6 ) = v 6. Wierzchołek v 6 nie ma dzieci. L(v 3 ) = v 3 v 6. Weź kolejne dziecko v 7 rodzica v 7. Wpisz v 7 na listę L(v 7 ) = v 7. Wierzchołek v 7 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7. Weź kolejne dziecko v 8 rodzica v 8. Wpisz v 8 na listę L(v 8 ) = v 8. Wierzchołek v 8 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka v 3 zostały uwzględnione. L( ) = v 2 v 4 v 5 v 9 0 v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka zostały (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 40 / 107 Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 2 v 4 v 5 v 9 0. Weź kolejne dziecko v 3 rodzica. Wpisz v 3 na listę L(v 3 ) = v 3. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. Wpisz v 6 na listę L(v 6 ) = v 6. Wierzchołek v 6 nie ma dzieci. L(v 3 ) = v 3 v 6. Weź kolejne dziecko v 7 rodzica v 7. Wpisz v 7 na listę L(v 7 ) = v 7. Wierzchołek v 7 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7. Weź kolejne dziecko v 8 rodzica v 8. Wpisz v 8 na listę L(v 8 ) = v 8. Wierzchołek v 8 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka v 3 zostały uwzględnione. L( ) = v 2 v 4 v 5 v 9 0 v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka zostały (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 41 / 107 Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 2 v 4 v 5 v 9 0. Weź kolejne dziecko v 3 rodzica. Wpisz v 3 na listę L(v 3 ) = v 3. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. Wpisz v 6 na listę L(v 6 ) = v 6. Wierzchołek v 6 nie ma dzieci. L(v 3 ) = v 3 v 6. Weź kolejne dziecko v 7 rodzica v 3. Wpisz v 7 na listę L(v 7 ) = v 7. Wierzchołek v 7 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. Wpisz v 8 na listę L(v 8 ) = v 8. Wierzchołek v 8 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka v 3 zostały uwzględnione. L( ) = v 2 v 4 v 5 v 9 0 v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka zostały (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 42 / 107 Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 2 v 4 v 5 v 9 0. Weź kolejne dziecko v 3 rodzica. Wpisz v 3 na listę L(v 3 ) = v 3. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. Wpisz v 6 na listę L(v 6 ) = v 6. Wierzchołek v 6 nie ma dzieci. L(v 3 ) = v 3 v 6. Weź kolejne dziecko v 7 rodzica v 3. Wpisz v 7 na listę L(v 7 ) = v 7. Wierzchołek v 7 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. Wpisz v 8 na listę L(v 8 ) = v 8. Wierzchołek v 8 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka v 3 zostały uwzględnione. L( ) = v 2 v 4 v 5 v 9 0 v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka zostały (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 43 / 107 Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8
Algorytm PREORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L( ) = v 2 v 4 v 5 v 9 0. L(v 3 ) = v 3. Wierzchołek v 8 nie ma dzieci. L(v 3 ) = v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka v 3 zostały uwzględnione. Dopisz L(v 3 ) na końcu listy L( ) L( ) = v 2 v 4 v 5 v 9 0 v 3 v 6 v 7 v 8. Wszystkie dzieci wierzchołka zostały uwzględnione. Koniec. aa aa aa(wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 44 / 107
Algorytm POSTORDER(v) Na wejściu: uporządkowane skończone drzewo z wyróżnionym korzeniem v. Na wyjściu: lista L(v) wszystkich wierzchołków tego drzewa, na której każdy rodzic jest umieszczony po swoich dzieciach. Na początku lista L(v) jest pusta, będziemy to zapisywać L(v) = λ dla każdego dziecka w wierzchołka v (w porządku od lewej strony do prawej) POSTORDER(w) (otrzymamy tu listę złożoną z w i jego potomków) dołącz L(w) na końcu dotychczas uzyskanej listy L(v) Dołącz v na końcu listy L(v). Obserwacja. Algorytm ten umieszcza wierzchołek na liście w momencie, gdy odwiedza go po raz ostatni. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 45 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. L(v 2 ) = v 4. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. L(v 5 ) = v 9. Weź kolejne dziecko 0 rodzica v 5. L(0 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 46 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. L(v 2 ) = v 4. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. L(v 5 ) = v 9. Weź kolejne dziecko 0 rodzica v 5. L(0 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 47 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. L(v 2 ) = v 4. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. L(v 5 ) = v 9. Weź kolejne dziecko 0 rodzica v 5. L(0 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 48 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. L(v 2 ) = v 4. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. L(v 5 ) = v 9. Weź kolejne dziecko 0 rodzica v 5. L(0 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 49 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. L(v 2 ) = v 4. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. L(v 5 ) = v 9. Weź kolejne dziecko 0 rodzica v 5. L(0 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 50 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. L(v 2 ) = v 4. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. L(v 5 ) = v 9. Weź kolejne dziecko 0 rodzica v 5. L(0 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 51 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L(v 2 ) = v 4. L(v 5 ) = v 9. L(0 ) = λ. Wierzchołek 0 nie ma dzieci. Wpisz 0 na listę. L(0 ) = 0. L(v 5 ) = v 9 0. Wszystkie dzieci v 5 zostały odwiedzone. Wpisz v 5 na listę. L(v 5 ) = v 9 0 v 5. L(v 2 ) = v 4 v 9 0 v 5. Wszystkie dzieci v 2 zostały odwiedzone. Wpisz v 2 na listę. L(v 5 ) = v 4 v 9 0 v 5 v 2. L( ) = v 4 v 9 0 v 5 v 2. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 52 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L(v 2 ) = v 4. L(v 5 ) = v 9. L(0 ) = λ. Wierzchołek 0 nie ma dzieci. Wpisz 0 na listę. L(0 ) = 0. L(v 5 ) = v 9 0. Wszystkie dzieci v 5 zostały odwiedzone. Wpisz v 5 na listę. L(v 5 ) = v 9 0 v 5. L(v 2 ) = v 4 v 9 0 v 5. Wszystkie dzieci v 2 zostały odwiedzone. Wpisz v 2 na listę. L(v 5 ) = v 4 v 9 0 v 5 v 2. L( ) = v 4 v 9 0 v 5 v 2. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 53 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L(v 2 ) = v 4. L(v 5 ) = v 9. L(0 ) = λ. Wierzchołek 0 nie ma dzieci. Wpisz 0 na listę. L(0 ) = 0. L(v 5 ) = v 9 0. Wszystkie dzieci v 5 zostały odwiedzone. Wpisz v 5 na listę. L(v 5 ) = v 9 0 v 5. L(v 2 ) = v 4 v 9 0 v 5. Wszystkie dzieci v 2 zostały odwiedzone. Wpisz v 2 na listę. L(v 2 ) = v 4 v 9 0 v 5 v 2. L( ) = v 4 v 9 0 v 5 v 2. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 54 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L(v 2 ) = v 4. L(v 5 ) = v 9. L(0 ) = λ. Wierzchołek 0 nie ma dzieci. Wpisz 0 na listę. L(0 ) = 0. L(v 5 ) = v 9 0. Wszystkie dzieci v 5 zostały odwiedzone. Wpisz v 5 na listę. L(v 5 ) = v 9 0 v 5. L(v 2 ) = v 4 v 9 0 v 5. Wszystkie dzieci v 2 zostały odwiedzone. Wpisz v 2 na listę. L( ) = v 4 v 9 0 v 5 v 2. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 55 / 107
v 9 0 L( ) = v 4 v 9 0 v 5 v 2. Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. L(v 3 ) = v 6. Weź kolejne dziecko v 7 rodzica v 3. L(v 7 ) = λ. Wierzchołek v 7 nie ma dzieci. Wpisz v 7 na listę. L(v 7 ) = v 7. L(v 3 ) = v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 56 / 107 Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 4 v 9 0 v 5 v 2. Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. L(v 3 ) = v 6. Weź kolejne dziecko v 7 rodzica v 3. L(v 7 ) = λ. Wierzchołek v 7 nie ma dzieci. Wpisz v 7 na listę. L(v 7 ) = v 7. L(v 3 ) = v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 57 / 107 Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 4 v 9 0 v 5 v 2. Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. L(v 3 ) = v 6. Weź kolejne dziecko v 7 rodzica v 3. L(v 7 ) = λ. Wierzchołek v 7 nie ma dzieci. Wpisz v 7 na listę. L(v 7 ) = v 7. L(v 3 ) = v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 58 / 107 Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 4 v 9 0 v 5 v 2. Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. L(v 3 ) = v 6. Weź kolejne dziecko v 7 rodzica v 3. L(v 7 ) = λ. Wierzchołek v 7 nie ma dzieci. Wpisz v 7 na listę. L(v 7 ) = v 7. L(v 3 ) = v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 59 / 107 Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8
v 9 0 L( ) = v 4 v 9 0 v 5 v 2. Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź pierwsze (lewe) dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. L(v 3 ) = v 6. Weź kolejne dziecko v 7 rodzica v 3. L(v 7 ) = λ. Wierzchołek v 7 nie ma dzieci. Wpisz v 7 na listę. L(v 7 ) = v 7. L(v 3 ) = v 6 v 7. Weź kolejne dziecko v 8 rodzica v 3. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 6 v 7 v 8. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 60 / 107 Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L( ) = v 4 v 9 0 v 5 v 2. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. L(v 3 ) = v 6 v 7 v 8 v 3. L( ) = v 4 v 9 0 v 5 v 2 v 6 v 7 v 8 v 3. Wszystkie dzieci wierzchołka zostały odwiedzone. Wpisz na listę. L( ) = v 4 v 9 0 v 5 v 2 v 6 v 7 v 8 v 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 61 / 107
Algorytm POSTORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 0 L( ) = v 4 v 9 0 v 5 v 2. L(v 3 ) = v 6 v 7 v 8. Wszystkie dzieci v 3 zostały odwiedzone. Wpisz v 3 na listę. L(v 3 ) = v 6 v 7 v 8 v 3. L( ) = v 4 v 9 0 v 5 v 2 v 6 v 7 v 8 v 3. Wszystkie dzieci wierzchołka zostały odwiedzone. Wpisz na listę. L( ) = v 4 v 9 0 v 5 v 2 v 6 v 7 v 8 v 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 62 / 107
Algorytm INORDER(v) Na wejściu: uporządkowane skończone drzewo z wyróżnionym korzeniem v. Na wyjściu: lista L(v) wszystkich wierzchołków tego drzewa, na której każdy rodzic jest umieszczony między swoim lewym i prawym dzieckiem (o ile je ma). Na początku lista L(v) jest pusta, będziemy to zapisywać L(v) = λ. Jeżeli v ma lewe dziecko w, to INORDER(w) (otrzymamy tu listę złożoną z w i jego potomków) dołącz L(w) na końcu dotychczas uzyskanej listy L(v); dołącz v na końcu listy. Jeżeli v ma prawe dziecko u, to INORDER(u) (otrzymamy tu listę złożoną z u i jego potomków) dołącz L(u) na końcu dotychczas uzyskanej listy L(v). Obserwacja. Jeżeli wierzchołek nie ma dzieci, to algorytm na wyjściu podaje tylko ten wierzchołek. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 63 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Powróć do v 2, wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 64 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Powróć do v 2, wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 65 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Powróć do v 2, wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 66 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 67 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 68 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 69 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 70 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Powróć do v 5, wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 71 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 Weź. L( ) = λ. Weź pierwsze (lewe) dziecko v 2 rodzica. L(v 2 ) = λ. Weź pierwsze (lewe) dziecko v 4 rodzica v 2. L(v 4 ) = λ. Wierzchołek v 4 nie ma dzieci. Wpisz v 4 na listę. L(v 4 ) = v 4. Wpisz v 2 na listę L(v 2 ) = v 4 v 2. Weź kolejne dziecko v 5 rodzica v 2. L(v 5 ) = λ. Weź pierwsze (lewe) dziecko v 8 rodzica v 5. L(v 8 ) = λ. Wierzchołek v 8 nie ma dzieci. Wpisz v 8 na listę. L(v 8 ) = v 8. Wpisz v 5 na listę L(v 5 ) = v 8 v 5. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 72 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L(v 2 ) = v 4 v 2, L(v 5 ) = v 8 v 5. Weź kolejne dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. Dołącz L(v 9 ) nas końcu listy L(v 5 ). L(v 5 )v 8 v 5 v 9. Dołącz L(v 5 ) nas końcu listy L(v 2 ). L(v 2 ) = v 4 v 2 v 8 v 5 v 9 Powróć do, wpisz na listę L( ) = v 4 v 2 v 8 v 5 v 9 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 73 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L(v 2 ) = v 4 v 2, L(v 5 ) = v 8 v 5. Weź kolejne dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. Dołącz L(v 9 ) nas końcu listy L(v 5 ). L(v 5 ) = v 8 v 5 v 9. Dołącz L(v 5 ) nas końcu listy L(v 2 ). L(v 2 ) = v 4 v 2 v 8 v 5 v 9 Powróć do, wpisz na listę L( ) = v 4 v 2 v 8 v 5 v 9 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 74 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L(v 2 ) = v 4 v 2, L(v 5 ) = v 8 v 5. Weź kolejne dziecko v 9 rodzica v 5. L(v 9 ) = λ. Wierzchołek v 9 nie ma dzieci. Wpisz v 9 na listę. L(v 9 ) = v 9. Dołącz L(v 9 ) nas końcu listy L(v 5 ). L(v 5 ) = v 8 v 5 v 9. Dołącz L(v 5 ) nas końcu listy L(v 2 ). L(v 2 ) = v 4 v 2 v 8 v 5 v 9 Wpisz na listę L( ) = v 4 v 2 v 8 v 5 v 9 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 75 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L( ) = v 4 v 2 v 8 v 5 v 9 Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź lewe dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. Powróć do v 3, wpisz v 3 na listę L(v 3 ) = v 6 v 3 Weź kolejne dziecko v 7 rodzica. L(v 3 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 76 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L( ) = v 4 v 2 v 8 v 5 v 9 Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź lewe dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. Powróć do v 3, wpisz v 3 na listę L(v 3 ) = v 6 v 3 Weź kolejne dziecko v 7 rodzica. L(v 3 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 77 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L( ) = v 4 v 2 v 8 v 5 v 9 Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź lewe dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. Powróć do v 3, wpisz v 3 na listę L(v 3 ) = v 6 v 3 Weź kolejne dziecko v 7 rodzica. L(v 3 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 78 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L( ) = v 4 v 2 v 8 v 5 v 9 Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź lewe dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. Wpisz v 3 na listę. L(v 3 ) = v 6 v 3. Weź kolejne dziecko v 7 rodzica. L(v 3 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 79 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L( ) = v 4 v 2 v 8 v 5 v 9 Weź kolejne dziecko v 3 rodzica. L(v 3 ) = λ. Weź lewe dziecko v 6 rodzica v 3. L(v 6 ) = λ. Wierzchołek v 6 nie ma dzieci. Wpisz v 6 na listę. L(v 6 ) = v 6. Wpisz v 3 na listę. L(v 3 ) = v 6 v 3 Weź kolejne dziecko v 7 rodzica. L(v 7 ) = λ. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 80 / 107
Algorytm INORDER(v), przykład v 4 v 5 v 6 v 7 v 8 v 9 L( ) = v 4 v 2 v 8 v 5 v 9, L(v 3 ) = v 6 v 3 Wierzchołek v 7 nie ma dzieci. Wpisz v 7 na listę. L(v 7 ) = v 7. Dołącz L(v 7 ) nas końcu listy L(v 3 ). L(v 3 ) = v 6 v 3 v 7. Dołącz L(v 3 ) nas końcu listy L( ). L( ) = v 4 v 2 v 8 v 5 v 9 v 6 v 3 v 7. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 81 / 107
Etykietowanie drzewa Uwaga. Do uporządkowanego etykietowania (rodzice mają większe etykiety niż dzieci) wierzchołków drzewa binarnego z wyróżnionym korzeniem możemy zastosować algorytm podobny do POSTORDER. Zaczynamy i kończymy w korzeniu, stosujemy zasady: trzymaj się prawej oraz jak dojdziesz do liścia, to zawróć Różnica jest taka, że odwiedzając wierzchołek po raz ostatni zamiast wpisywać go na listę przypisujemy mu etykietę z kolejnym numerem. Oczywiście każdy liść odwiedzamy tylko raz (więc jest to odwiedzanie po raz ostatni). Przykład. Zaetykietujemy drzewo z poprzednich przykładów. (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 82 / 107
Etykietowanie drzewa, przykład v 4 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 83 / 107
Etykietowanie drzewa, przykład v 4 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 84 / 107
Etykietowanie drzewa, przykład v 4 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 85 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 86 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 87 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 88 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 v 9 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 89 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 2 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 90 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 2 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 91 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 2 0 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 92 / 107
Etykietowanie drzewa, przykład 1 v 5 v 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 93 / 107
Etykietowanie drzewa, przykład 1 4 v 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 94 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 v 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 95 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 v 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 96 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 v 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 97 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 v 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 98 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 99 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 100 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 v 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 101 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 102 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 103 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 7 v 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 104 / 107
Etykietowanie drzewa, przykład 5 v 3 1 4 6 7 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 105 / 107
Etykietowanie drzewa, przykład 5 9 1 4 6 7 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 106 / 107
Etykietowanie drzewa, przykład 10 5 9 1 4 6 7 8 2 3 (Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 107 / 107