Grafy (3): drzewa - UTP

107
Grafy (3): drzewa Wyklady z matematyki dyskretnej dla informatyków i teleinformatyków UTP Bydgoszcz 13 (Wyklady z matematyki dyskretnej) Grafy (3): drzewa 13 1/1

Transcript of Grafy (3): drzewa - UTP

Page 1: Grafy (3): drzewa - UTP

Grafy (3): drzewa

Wykłady z matematyki dyskretnejdla informatyków i teleinformatyków

UTP Bydgoszcz

13

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 1 / 1

Page 2: Grafy (3): drzewa - UTP

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 / 1

Page 3: Grafy (3): drzewa - UTP

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 / 1

Page 4: Grafy (3): drzewa - UTP

Jeszcze kilka definicji

Liść drzewa to wierzchołek o stopniu 1.

Przykład.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 4 / 1

Page 5: Grafy (3): drzewa - UTP

Liście

Fakt. Każde drzewo skończone o co najmniej jednej krawędzi ma conajmniej dwa liście.

Uzasadnienie.Niech w1 . . .wm będzie najdłuższą drogą acykliczną w drzewie. Wtedywierzchołki w1 oraz wm są liśćmi: oczywiście w1 6= wm (droga jestacykliczna) i mają stopień 1 (gdyby nie, to istniałaby droga dłuższa odw1 . . .wm).

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 5 / 1

Page 6: Grafy (3): drzewa - UTP

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 / 1

Page 7: Grafy (3): drzewa - UTP

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 man − 1 krawędzi.Niech T będzie drzewem o n + 1 wierzchołkach. Z poprzedniegofaktu wiemy, że T ma liść. Jeśli usuniemy z T wierzchołek będącyliściem i usuniemy krawędź wychodzącą z tego wierzchołka, tootrzymamy 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 / 1

Page 8: Grafy (3): drzewa - UTP

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 nadaldostaniemy podraf łączący wszystkie wierzchołki G , co jest sprzeczne zminimalnością G .

Definicja.Drzewem spinającym D grafu G jest drzewo zawierające wszystkiewierzchołki tego grafu.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 8 / 1

Page 9: Grafy (3): drzewa - UTP

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 / 1

Page 10: Grafy (3): drzewa - UTP

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 zawierawszystkie wierzchołki G i możliwie najmniejszą liczbę krawędzi. Gdyby Hzawierał cykl, to usuwając jedną krawędź tego cyklu nadal dostaniemypodraf spójny łączący wszystkie wierzchołki G , co jest sprzeczne zminimalnością H.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 10 / 1

Page 11: Grafy (3): drzewa - UTP

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ójnejskł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łkiemspoza V , to wybierz taką krawędź łączącą u ∈ V z w /∈ V .Dołącz w do V oraz krawędź {u,w} do E .

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 11 / 1

Page 12: Grafy (3): drzewa - UTP

Przykład, algorytm DRZEWO(1)

1 2

3 4 5

6 7 8

1 2

3 4 5

6 7 8

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 / 1

Page 13: Grafy (3): drzewa - UTP

Przykład, algorytm DRZEWO(2)

2

1

5

4

3

7

8

6

9 2

1

5

4

3

7

8

6

9

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 / 1

Page 14: Grafy (3): drzewa - UTP

Przykład, algorytm DRZEWO(3)

2

1

5

4

3

7

8

6

9 2

1

5

4

3

7

8

6

9

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 / 1

Page 15: Grafy (3): drzewa - UTP

Algorytm LAS

Na wejściu: graf G (VG ,EG ) (skończony).Na wyjściu: zbiór krawędzi EE lasu spinającego.

Niech VV := ∅ oraz EE := ∅.Dopóki VV 6= VG wykonaj:

wybierz v ∈ VG \ VVwykonaj DRZEWO(v) otrzymując zbiór wierzchołków V i zbiórkrawędzi E drzewa spinającego tej składowej spójnej grafu, którazawiera 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 / 1

Page 16: Grafy (3): drzewa - UTP

Przykład, algorytm LAS

1 2

3 4 5

6 7 8

1 2

3 4 5

6 7 8

VV := {1}; EE := ∅.Wybierz 1 ∈ VG \ 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 EEVV := {1, 2, 3, 4, 5, 6, 7, 8}EE := {{1, 2}, {1, 3}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {5, 8}}.VV = VG ; zakończ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 16 / 1

Page 17: Grafy (3): drzewa - UTP

Przykład, algorytm LAS

2

1

5

4

3

7

8

6

9 2

1

5

4

3

7

8

6

9

VV := ∅; EE := ∅.Wybierz 2 ∈ VG \ 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 EEVV := {2, 4, 6, 9, 8}EE := {{2, 4}, {4, 6}, {6, 9}, {9, 8}}.VV 6= VG ;aaaa

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 17 / 1

Page 18: Grafy (3): drzewa - UTP

Przykład, algorytm LAS , ciąg dalszy

2

1

5

4

3

7

8

6

9 2

1

5

4

3

7

8

6

9

VV := {2, 4, 6, 8, 9}EE := {{2, 4}, {4, 6}, {6, 9}, {9, 8}}.VV 6= VG ; wybierz 3 ∈ VG \ 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 EEVV := {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 = VG ; zakończ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 18 / 1

Page 19: Grafy (3): drzewa - UTP

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 / 1

Page 20: Grafy (3): drzewa - UTP

Drzewo poszukiwań binarnych

Obserwacja.

Zestaw słów, ciąg liczb, czy inny zbiór z ustalonym porządkiem możnaprzedstawić w postaci drzewa z wyróżnionym korzeniem zwanegodrzewem 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 / 1

Page 21: Grafy (3): drzewa - UTP

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ąsiedniegowierzchołka dolnego-prawego. Ponadto w tym przykładzie na każdympoziomie etykieta z lewej strony jest wcześniejsza od etykiety po prawej.

ja

ga on

be gu my wy

tydr ir

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 21 / 1

Page 22: Grafy (3): drzewa - UTP

„Drzewo genealogiczne”

Niech T będzie drzewem z wyróżnionym korzeniem k . Umowniepotraktujmy 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 6= uoraz u jest jakimś wierzchołkiem jedynej drogi prostej z korzenia dowierczhołka w .

Definicja. Jeśli v jest wierzchołkiem, to poddrzewo Yv o korzeniu v jestdrzewem składającym się z v , z wszystkich jego potomków oraz wszystkichkrawędzi łączących te wierzchołki.

Fakt. Każdy wierzchołek (z wyjątkiem korzenia) ma dokładnie jednegorodzica.Rodzic może mieć więcej niż jedno dziecko.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 22 / 1

Page 23: Grafy (3): drzewa - UTP

Poddrzewa

Przykład. Drzewo i jego niejednowierzchołkowe poddrzewa.

ja

ga on

be gu my wy

tydr ir

ga

be gu

dr ir

on

my wy

ty

gu

dr ir

wy

ty

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 23 / 1

Page 24: Grafy (3): drzewa - UTP

Drzewo binarne

Definicja. Drzewo binarne to drzewo z wyróżnionym korzeniem, w którymkaż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órymkażdy rodzic ma co najwyżej m dzieci oznaczanych różnymi liczbami zezbioru {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 / 1

Page 25: Grafy (3): drzewa - UTP

Wysokość drzewa

Definicja. Numer poziomu wierzchołka v to długość jedynej drogi prostejod korzenia do v . Numer korzenia to zero.

Definicja. Wysokość drzewa z wyróżnionym korzeniem to największynumer poziomu wierzchołka (długość najdłuższej drogi prostejwychodzącej z korzenia).

Definicja. Regularne drzewo o m rozgałęzieniach (m > 2) lub regularnedrzewo binarne (m = 2) jest pełnym drzewem o m rozgałęzieniach, jeśliwszystkie liście mają numer poziomu równy wysokości drzewa.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 25 / 1

Page 26: Grafy (3): drzewa - UTP

Przykład,pełne drzewo o trzech rozgałęzieniach i wysokości dwa.

Drzewo to ma 13 wierzchołków, 13 = 32+1−13−1 .

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 26 / 1

Page 27: Grafy (3): drzewa - UTP

Drzewo pełne

Fakt. Pełne drzewo o m rozgałęzieniach i wysokości h ma mh+1−1m−1

wierzchołków.

Uzasadnienie.Na poziomie pierwszym mamy m wierzchołków (korzeń ma m dzieci).Każy z tych wierzchołków ma m dzieci, więc na poziomie drugim mamym2 dzieci, ...Sumując, mamy na wszystkich poziomach

1+m +m2 + · · ·+mh

wierzchołków. Stosujemy wzór na sumę h + 1 początkowych wyrazówciągu geometrycznego:

1+m +m2 + · · ·+mh = 1 · 1−mh+1

1−m=

mh+1 − 1m − 1

.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 27 / 1

Page 28: Grafy (3): drzewa - UTP

Drzewo pełne

Fakt. Pełne drzewo o m rozgałęzieniach i wysokości h ma mh−1m−1 rodziców

oraz mh liści.

Przykład. Pełne drzewo o trzech rozgałęzieniach i wysokości dwa ma 4rodziców i 9 liści.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 28 / 1

Page 29: Grafy (3): drzewa - UTP

Drzewo uporządkowane

Definicja.Uporządkowane drzewo z wyróżnionym korzeniem to takie drzewo, wktórym uporządkujemy dzieci każdego rodzica (od strony lewej do prawej).

Przykład. Przyjmujemy O < R. Graf ten może przedstawiać wynikipowtarzanego rzutu monetą.

O R

OO OR RO RR

OOO OOR ORO ORR RRRRRORORROO

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 29 / 1

Page 30: Grafy (3): drzewa - UTP

Algorytm DRZEWO i LAS

Uwaga.Aby sprawdzić, czy graf jest spójny wystarczy sprawdzić, czy algorytmDRZEWO(v) (dla dowolnego wierzchołka v) tworzy drzewo zawierającewszystkie wierzchołki grafulub,równoważnie, czy algorytm LAS tworzy tylko jedno drzewo.

Uwaga.Aby sprawdzić, czy graf G jest acykliczny wystarczy sprawdzić, czyutworzony las spinający jest całym grafem (czy ‖EE‖ = ‖EG‖).

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 30 / 1

Page 31: Grafy (3): drzewa - UTP

Algorytmy przeszukiwania w głąb drzewa z wyróżnionymkorzeniem

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ę przedswoim 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 / 1

Page 32: Grafy (3): drzewa - UTP

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órejkaż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 doprawej)

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 odwiedzago po raz pierwszy.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 32 / 1

Page 33: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Wpisz v1 na listę. L(v1) = v1.Weź pierwsze (lewe) dziecko v2 rodzica v1. Wpisz v2 na listę L(v2) = v2.Weź pierwsze (lewe) dziecko v4 rodzica v2. Wpisz v4 na listę L(v4) = v4.Wierzchołek v4 nie ma dzieci. L(v2) = v2v4.Weź kolejne dziecko v5 rodzica v2. Wpisz v5 na listę L(v5) = v5.Weź pierwsze (lewe) dziecko v9 rodzica v5. Wpisz v9 na listę L(v9) = v9.Wierzchołek v9 nie ma dzieci. L(v5) = v5v9.Weź kolejne dziecko v10 rodzica v5. Wpisz v10 na listę L(v10) = v10.Wierzchołek v10 nie ma dzieci. L(v5) = v5v9v10.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 33 / 1

Page 34: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Wpisz v1 na listę. L(v1) = v1.Weź pierwsze (lewe) dziecko v2 rodzica v1. Wpisz v2 na listę L(v2) = v2.Weź pierwsze (lewe) dziecko v4 rodzica v2. Wpisz v4 na listę L(v4) = v4.Wierzchołek v4 nie ma dzieci. L(v2) = v2v4.Weź kolejne dziecko v5 rodzica v2. Wpisz v5 na listę L(v5) = v5.Weź pierwsze (lewe) dziecko v9 rodzica v5. Wpisz v9 na listę L(v9) = v9.Wierzchołek v9 nie ma dzieci. L(v5) = v5v9.Weź kolejne dziecko v10 rodzica v5. Wpisz v10 na listę L(v10) = v10.Wierzchołek v10 nie ma dzieci. L(v5) = v5v9v10.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 34 / 1

Page 35: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Wpisz v1 na listę. L(v1) = v1.Weź pierwsze (lewe) dziecko v2 rodzica v1. Wpisz v2 na listę L(v2) = v2.Weź pierwsze (lewe) dziecko v4 rodzica v2. Wpisz v4 na listę L(v4) = v4.Wierzchołek v4 nie ma dzieci. L(v2) = v2v4.Weź kolejne dziecko v5 rodzica v2. Wpisz v5 na listę L(v5) = v5.Weź pierwsze (lewe) dziecko v9 rodzica v5. Wpisz v9 na listę L(v9) = v9.Wierzchołek v9 nie ma dzieci. L(v5) = v5v9.Weź kolejne dziecko v10 rodzica v5. Wpisz v10 na listę L(v10) = v10.Wierzchołek v10 nie ma dzieci. L(v5) = v5v9v10.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 35 / 1

Page 36: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Wpisz v1 na listę. L(v1) = v1.Weź pierwsze (lewe) dziecko v2 rodzica v1. Wpisz v2 na listę L(v2) = v2.Weź pierwsze (lewe) dziecko v4 rodzica v2. Wpisz v4 na listę L(v4) = v4.Wierzchołek v4 nie ma dzieci. L(v2) = v2v4.Weź kolejne dziecko v5 rodzica v2. Wpisz v5 na listę L(v5) = v5.Weź pierwsze (lewe) dziecko v9 rodzica v5. Wpisz v9 na listę L(v9) = v9.Wierzchołek v9 nie ma dzieci. L(v5) = v5v9.Weź kolejne dziecko v10 rodzica v5. Wpisz v10 na listę L(v10) = v10.Wierzchołek v10 nie ma dzieci. L(v5) = v5v9v10.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 36 / 1

Page 37: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Wpisz v1 na listę. L(v1) = v1.Weź pierwsze (lewe) dziecko v2 rodzica v1. Wpisz v2 na listę L(v2) = v2.Weź pierwsze (lewe) dziecko v4 rodzica v2. Wpisz v4 na listę L(v4) = v4.Wierzchołek v4 nie ma dzieci. L(v2) = v2v4.Weź kolejne dziecko v5 rodzica v2. Wpisz v5 na listę L(v5) = v5.Weź pierwsze (lewe) dziecko v9 rodzica v5. Wpisz v9 na listę L(v9) = v9.Wierzchołek v9 nie ma dzieci. L(v5) = v5v9.Weź kolejne dziecko v10 rodzica v5. Wpisz v10 na listę L(v10) = v10.Wierzchołek v10 nie ma dzieci. L(v5) = v5v9v10.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 37 / 1

Page 38: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Wpisz v1 na listę. L(v1) = v1.Weź pierwsze (lewe) dziecko v2 rodzica v1. Wpisz v2 na listę L(v2) = v2.Weź pierwsze (lewe) dziecko v4 rodzica v2. Wpisz v4 na listę L(v4) = v4.Wierzchołek v4 nie ma dzieci. L(v2) = v2v4.Weź kolejne dziecko v5 rodzica v2. Wpisz v5 na listę L(v5) = v5.Weź pierwsze (lewe) dziecko v9 rodzica v5. Wpisz v9 na listę L(v9) = v9.Wierzchołek v9 nie ma dzieci. L(v5) = v5v9.Weź kolejne dziecko v10 rodzica v5. Wpisz v10 na listę L(v10) = v10.Wierzchołek v10 nie ma dzieci. L(v5) = v5v9v10.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 38 / 1

Page 39: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v2) = v2v4, L(v5) = v5v9v10.Wszyscy potomkowie v2 zostali uwzględnieni.L(v2) = v2v4v5v9v10.L(v1) = v1v2v4v5v9v10.aaaaaaaaaaa(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 39 / 1

Page 40: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v1v2v4v5v9v10.Weź kolejne dziecko v3 rodzica v1. Wpisz v3 na listę L(v3) = v3.Weź pierwsze (lewe) dziecko v6 rodzica v3. Wpisz v6 na listę L(v6) = v6.Wierzchołek v6 nie ma dzieci. L(v3) = v3v6.Weź kolejne dziecko v7 rodzica v7. Wpisz v7 na listę L(v7) = v7.Wierzchołek v7 nie ma dzieci. L(v3) = v3v6v7.Weź kolejne dziecko v8 rodzica v8. Wpisz v8 na listę L(v8) = v8.Wierzchołek v8 nie ma dzieci. L(v3) = v3v6v7v8.Wszystkie dzieci wierzchołka v3 zostały uwzględnione.L(v1) = v1v2v4v5v9v10v3v6v7v8. Wszystkie dzieci wierzchołka v1 zostałyuwzględnione. Koniec.(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 40 / 1

Page 41: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v1v2v4v5v9v10.Weź kolejne dziecko v3 rodzica v1. Wpisz v3 na listę L(v3) = v3.Weź pierwsze (lewe) dziecko v6 rodzica v3. Wpisz v6 na listę L(v6) = v6.Wierzchołek v6 nie ma dzieci. L(v3) = v3v6.Weź kolejne dziecko v7 rodzica v7. Wpisz v7 na listę L(v7) = v7.Wierzchołek v7 nie ma dzieci. L(v3) = v3v6v7.Weź kolejne dziecko v8 rodzica v8. Wpisz v8 na listę L(v8) = v8.Wierzchołek v8 nie ma dzieci. L(v3) = v3v6v7v8.Wszystkie dzieci wierzchołka v3 zostały uwzględnione.L(v1) = v1v2v4v5v9v10v3v6v7v8. Wszystkie dzieci wierzchołka v1 zostałyuwzględnione. Koniec.(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 41 / 1

Page 42: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v1v2v4v5v9v10.Weź kolejne dziecko v3 rodzica v1. Wpisz v3 na listę L(v3) = v3.Weź pierwsze (lewe) dziecko v6 rodzica v3. Wpisz v6 na listę L(v6) = v6.Wierzchołek v6 nie ma dzieci. L(v3) = v3v6.Weź kolejne dziecko v7 rodzica v3. Wpisz v7 na listę L(v7) = v7.Wierzchołek v7 nie ma dzieci. L(v3) = v3v6v7.Weź kolejne dziecko v8 rodzica v3. Wpisz v8 na listę L(v8) = v8.Wierzchołek v8 nie ma dzieci. L(v3) = v3v6v7v8.Wszystkie dzieci wierzchołka v3 zostały uwzględnione.L(v1) = v1v2v4v5v9v10v3v6v7v8. Wszystkie dzieci wierzchołka v1 zostałyuwzględnione. Koniec.(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 42 / 1

Page 43: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v1v2v4v5v9v10.Weź kolejne dziecko v3 rodzica v1. Wpisz v3 na listę L(v3) = v3.Weź pierwsze (lewe) dziecko v6 rodzica v3. Wpisz v6 na listę L(v6) = v6.Wierzchołek v6 nie ma dzieci. L(v3) = v3v6.Weź kolejne dziecko v7 rodzica v3. Wpisz v7 na listę L(v7) = v7.Wierzchołek v7 nie ma dzieci. L(v3) = v3v6v7.Weź kolejne dziecko v8 rodzica v3. Wpisz v8 na listę L(v8) = v8.Wierzchołek v8 nie ma dzieci. L(v3) = v3v6v7v8.Wszystkie dzieci wierzchołka v3 zostały uwzględnione.L(v1) = v1v2v4v5v9v10v3v6v7v8. Wszystkie dzieci wierzchołka v1 zostałyuwzględnione. Koniec.(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 43 / 1

Page 44: Grafy (3): drzewa - UTP

Algorytm PREORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v1) = v1v2v4v5v9v10. L(v3) = v3.

Wierzchołek v8 nie ma dzieci. L(v3) = v3v6v7v8.Wszystkie dzieci wierzchołka v3 zostały uwzględnione.Dopisz L(v3) na końcu listy L(v1)L(v1) = v1v2v4v5v9v10v3v6v7v8. Wszystkie dzieci wierzchołka v1 zostałyuwzględnione. Koniec.aaaaaa(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 44 / 1

Page 45: Grafy (3): drzewa - UTP

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órejkaż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 doprawej)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 odwiedzago po raz ostatni.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 45 / 1

Page 46: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. L(v2) = v4.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9. L(v5) = v9.Weź kolejne dziecko v10 rodzica v5. L(v10) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 46 / 1

Page 47: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. L(v2) = v4.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9. L(v5) = v9.Weź kolejne dziecko v10 rodzica v5. L(v10) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 47 / 1

Page 48: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. L(v2) = v4.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9. L(v5) = v9.Weź kolejne dziecko v10 rodzica v5. L(v10) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 48 / 1

Page 49: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. L(v2) = v4.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9. L(v5) = v9.Weź kolejne dziecko v10 rodzica v5. L(v10) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 49 / 1

Page 50: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. L(v2) = v4.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9. L(v5) = v9.Weź kolejne dziecko v10 rodzica v5. L(v10) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 50 / 1

Page 51: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. L(v2) = v4.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9. L(v5) = v9.Weź kolejne dziecko v10 rodzica v5. L(v10) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 51 / 1

Page 52: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v2) = v4. L(v5) = v9. L(v10) = λ.

Wierzchołek v10 nie ma dzieci. Wpisz v10 na listę. L(v10) = v10.L(v5) = v9v10.Wszystkie dzieci v5 zostały odwiedzone. Wpisz v5 na listę.L(v5) = v9v10v5. L(v2) = v4v9v10v5.Wszystkie dzieci v2 zostały odwiedzone. Wpisz v2 na listę.L(v5) = v4v9v10v5v2.L(v1) = v4v9v10v5v2.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 52 / 1

Page 53: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v2) = v4. L(v5) = v9. L(v10) = λ.

Wierzchołek v10 nie ma dzieci. Wpisz v10 na listę. L(v10) = v10.L(v5) = v9v10.Wszystkie dzieci v5 zostały odwiedzone. Wpisz v5 na listę.L(v5) = v9v10v5. L(v2) = v4v9v10v5.Wszystkie dzieci v2 zostały odwiedzone. Wpisz v2 na listę.L(v5) = v4v9v10v5v2.L(v1) = v4v9v10v5v2.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 53 / 1

Page 54: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v2) = v4. L(v5) = v9. L(v10) = λ.

Wierzchołek v10 nie ma dzieci. Wpisz v10 na listę. L(v10) = v10.L(v5) = v9v10.Wszystkie dzieci v5 zostały odwiedzone. Wpisz v5 na listę.L(v5) = v9v10v5. L(v2) = v4v9v10v5.Wszystkie dzieci v2 zostały odwiedzone. Wpisz v2 na listę.L(v2) = v4v9v10v5v2.L(v1) = v4v9v10v5v2.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 54 / 1

Page 55: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v2) = v4. L(v5) = v9. L(v10) = λ.

Wierzchołek v10 nie ma dzieci. Wpisz v10 na listę. L(v10) = v10.L(v5) = v9v10.Wszystkie dzieci v5 zostały odwiedzone. Wpisz v5 na listę.L(v5) = v9v10v5. L(v2) = v4v9v10v5.Wszystkie dzieci v2 zostały odwiedzone. Wpisz v2 na listę.L(v1) = v4v9v10v5v2.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 55 / 1

Page 56: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v4v9v10v5v2.Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź pierwsze (lewe) dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6. L(v3) = v6.Weź kolejne dziecko v7 rodzica v3. L(v7) = λ.Wierzchołek v7 nie ma dzieci. Wpisz v7 na listę. L(v7) = v7. L(v3) = v6v7.Weź kolejne dziecko v8 rodzica v3. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8.L(v3) = v6v7v8.Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 56 / 1

Page 57: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v4v9v10v5v2.Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź pierwsze (lewe) dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6. L(v3) = v6.Weź kolejne dziecko v7 rodzica v3. L(v7) = λ.Wierzchołek v7 nie ma dzieci. Wpisz v7 na listę. L(v7) = v7. L(v3) = v6v7.Weź kolejne dziecko v8 rodzica v3. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8.L(v3) = v6v7v8.Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 57 / 1

Page 58: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v4v9v10v5v2.Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź pierwsze (lewe) dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6. L(v3) = v6.Weź kolejne dziecko v7 rodzica v3. L(v7) = λ.Wierzchołek v7 nie ma dzieci. Wpisz v7 na listę. L(v7) = v7. L(v3) = v6v7.Weź kolejne dziecko v8 rodzica v3. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8.L(v3) = v6v7v8.Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 58 / 1

Page 59: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v4v9v10v5v2.Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź pierwsze (lewe) dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6. L(v3) = v6.Weź kolejne dziecko v7 rodzica v3. L(v7) = λ.Wierzchołek v7 nie ma dzieci. Wpisz v7 na listę. L(v7) = v7. L(v3) = v6v7.Weź kolejne dziecko v8 rodzica v3. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8.L(v3) = v6v7v8.Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 59 / 1

Page 60: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10 L(v1) = v4v9v10v5v2.Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź pierwsze (lewe) dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6. L(v3) = v6.Weź kolejne dziecko v7 rodzica v3. L(v7) = λ.Wierzchołek v7 nie ma dzieci. Wpisz v7 na listę. L(v7) = v7. L(v3) = v6v7.Weź kolejne dziecko v8 rodzica v3. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v6v7v8.L(v3) = v6v7v8.Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.

L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 60 / 1

Page 61: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v1) = v4v9v10v5v2.

L(v3) = v6v7v8.

Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.

L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 61 / 1

Page 62: Grafy (3): drzewa - UTP

Algorytm POSTORDER(v), przykładv1

v2 v3

v4 v5 v6 v7 v8

v9 v10

L(v1) = v4v9v10v5v2.

L(v3) = v6v7v8.

Wszystkie dzieci v3 zostały odwiedzone. Wpisz v3 na listę.L(v3) = v6v7v8v3.L(v1) = v4v9v10v5v2v6v7v8v3.Wszystkie dzieci wierzchołka v1 zostały odwiedzone. Wpisz v1 na listę.

L(v1) = v4v9v10v5v2v6v7v8v3v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 62 / 1

Page 63: Grafy (3): drzewa - UTP

Algorytm INORDER(v)

Na wejściu: uporządkowane skończone drzewo binarne z wyróżnionymkorzeniem v .

Na wyjściu: lista L(v) wszystkich wierzchołków tego drzewa, na którejkaż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 , toINORDER(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, toINORDER(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 tenwierzchołek.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 63 / 1

Page 64: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. Powróć do v2,wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v9) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 64 / 1

Page 65: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. Powróć do v2,wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v9) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 65 / 1

Page 66: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. Powróć do v2,wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v9) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 66 / 1

Page 67: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4. Wpisz v2 nalistę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v9) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 67 / 1

Page 68: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4.Wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v9) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 68 / 1

Page 69: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4.Wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v9) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 69 / 1

Page 70: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4.Wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8. Powróć do v5,wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 70 / 1

Page 71: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4.Wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8.Powróć do v5, wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 71 / 1

Page 72: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 Weź v1. L(v1) = λ.Weź pierwsze (lewe) dziecko v2 rodzica v1. L(v2) = λ.Weź pierwsze (lewe) dziecko v4 rodzica v2. L(v4) = λ.Wierzchołek v4 nie ma dzieci. Wpisz v4 na listę. L(v4) = v4.Wpisz v2 na listę L(v2) = v4v2.Weź kolejne dziecko v5 rodzica v2. L(v5) = λ.Weź pierwsze (lewe) dziecko v8 rodzica v5. L(v8) = λ.Wierzchołek v8 nie ma dzieci. Wpisz v8 na listę. L(v8) = v8.Wpisz v5 na listę L(v5) = v8v5.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 72 / 1

Page 73: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v2) = v4v2, L(v5) = v8v5.

Weź kolejne dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9.Dołącz L(v9) nas końcu listy L(v5).L(v5)v8v5v9.Dołącz L(v5) nas końcu listy L(v2).L(v2) = v4v2v8v5v9Powróć do v1, wpisz v1 na listęL(v1) = v4v2v8v5v9v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 73 / 1

Page 74: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v2) = v4v2, L(v5) = v8v5.

Weź kolejne dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9.Dołącz L(v9) nas końcu listy L(v5).L(v5) = v8v5v9.Dołącz L(v5) nas końcu listy L(v2).L(v2) = v4v2v8v5v9Powróć do v1, wpisz v1 na listęL(v1) = v4v2v8v5v9v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 74 / 1

Page 75: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v2) = v4v2, L(v5) = v8v5.

Weź kolejne dziecko v9 rodzica v5. L(v9) = λ.Wierzchołek v9 nie ma dzieci. Wpisz v9 na listę. L(v9) = v9.Dołącz L(v9) nas końcu listy L(v5).L(v5) = v8v5v9.Dołącz L(v5) nas końcu listy L(v2).L(v2) = v4v2v8v5v9Wpisz v1 na listęL(v1) = v4v2v8v5v9v1

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 75 / 1

Page 76: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v1) = v4v2v8v5v9v1

Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź lewe dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6.Powróć do v3, wpisz v3 na listęL(v3) = v6v3Weź kolejne dziecko v7 rodzica v1. L(v3) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 76 / 1

Page 77: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v1) = v4v2v8v5v9v1

Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź lewe dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6.Powróć do v3, wpisz v3 na listęL(v3) = v6v3Weź kolejne dziecko v7 rodzica v1. L(v3) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 77 / 1

Page 78: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v1) = v4v2v8v5v9v1

Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź lewe dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6.Powróć do v3, wpisz v3 na listęL(v3) = v6v3Weź kolejne dziecko v7 rodzica v1. L(v3) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 78 / 1

Page 79: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v1) = v4v2v8v5v9v1

Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź lewe dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6.Wpisz v3 na listę. L(v3) = v6v3.Weź kolejne dziecko v7 rodzica v1. L(v3) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 79 / 1

Page 80: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9 L(v1) = v4v2v8v5v9v1

Weź kolejne dziecko v3 rodzica v1. L(v3) = λ.Weź lewe dziecko v6 rodzica v3. L(v6) = λ.Wierzchołek v6 nie ma dzieci. Wpisz v6 na listę. L(v6) = v6.Wpisz v3 na listę. L(v3) = v6v3Weź kolejne dziecko v7 rodzica v1. L(v7) = λ.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 80 / 1

Page 81: Grafy (3): drzewa - UTP

Algorytm INORDER(v), przykładv1

v2 v3

v4 v5 v6 v7

v8 v9

L(v1) = v4v2v8v5v9v1, L(v3) = v6v3

Wierzchołek v7 nie ma dzieci. Wpisz v7 na listę. L(v7) = v7.Dołącz L(v7) nas końcu listy L(v3). L(v3) = v6v3v7.Dołącz L(v3) nas końcu listy L(v1).L(v1) = v4v2v8v5v9v1v6v3v7.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 81 / 1

Page 82: Grafy (3): drzewa - UTP

Etykietowanie drzewa

Uwaga.Do uporządkowanego etykietowania (rodzice mają większe etykiety niżdzieci) wierzchołków drzewa binarnego z wyróżnionym korzeniem możemyzastosować algorytm podobny do POSTORDER. Zaczynamy i kończymyw korzeniu, stosujemy zasady: „trzymaj się prawej” oraz „ jak dojdziesz doliścia, to zawróć”Różnica jest taka, że odwiedzając wierzchołek po raz ostatni zamiastwpisywać go na listę przypisujemy mu etykietę z kolejnym numerem.Oczywiście każdy liść odwiedzamy tylko raz (więc jest to odwiedzanie poraz ostatni).

Przykład.Zaetykietujemy drzewo z poprzednich przykładów.

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 82 / 1

Page 83: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 83 / 1

Page 84: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 84 / 1

Page 85: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

v4 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 85 / 1

Page 86: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 86 / 1

Page 87: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 87 / 1

Page 88: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 88 / 1

Page 89: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

v9 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 89 / 1

Page 90: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

2 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 90 / 1

Page 91: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

2 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 91 / 1

Page 92: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

2 v10

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 92 / 1

Page 93: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 v5 v6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 93 / 1

Page 94: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

v2 v3

1 4 v6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 94 / 1

Page 95: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 v6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 95 / 1

Page 96: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 v6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 96 / 1

Page 97: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 v6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 97 / 1

Page 98: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 v6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 98 / 1

Page 99: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 99 / 1

Page 100: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 100 / 1

Page 101: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 v7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 101 / 1

Page 102: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 102 / 1

Page 103: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 103 / 1

Page 104: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 7 v8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 104 / 1

Page 105: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 v3

1 4 6 7 8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 105 / 1

Page 106: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

v1

5 9

1 4 6 7 8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 106 / 1

Page 107: Grafy (3): drzewa - UTP

Etykietowanie drzewa, przykład

10

5 9

1 4 6 7 8

2 3

(Wykłady z matematyki dyskretnej) Grafy (3): drzewa 13 107 / 1