Grafy (3): drzewa - UTP

Post on 16-Oct-2021

5 views 0 download

Transcript of 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

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

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

Jeszcze kilka definicji

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

Przykład.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

„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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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