programare s˘i structuri de datemarianzsu/postuniv/curs/curs07.pdfde exemplu: g asit˘i o solut˘ie...

196
Arbori n-ari Arbori binari PROGRAMARE S ¸I STRUCTURI DE DATE CURS 7 Lect. dr. Onet ¸ - Marian Zsuzsanna Facultatea de Matematic˘ si Informatic˘ a UBB ˆ ın colaborare cu NTT Data Lect. dr. Onet ¸ - Marian Zsuzsanna PROGRAMARE S ¸I STRUCTURI DE DATE

Upload: others

Post on 07-Mar-2020

4 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

PROGRAMARE SI STRUCTURI DE DATECURS 7

Lect. dr. Onet - Marian Zsuzsanna

Facultatea de Matematica si Informatica UBBın colaborare cu NTT Data

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 2: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Cuprins

Arbore

Arbore binar

Arbore binar de cautare

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 3: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori

Un arbore este o structura de date alcatuita din noduri,fiecare nod poate sa aiba 0 sau mai multi descendenti (copii)si fiecare nod are un singur parinte.

Intr-un arbore, toate nodurile trebuie sa fie conectate (trebuiesa existe un drum de a ajunge de la fiecare nod la fiecare altnod).

Nu pot exista cicluri ıntr-un arbore: pornind de la un nod siparcurgand alte noduri, nu putem ajunge ınapoi la nodul de lacare am plecat.

Intr-un arbore cu n noduri exista n-1 legaturi.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 4: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Exemplu de arbore:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 5: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Nu este arbore (nu este conectata), nu pot ajunge de la nodulA la L (de exemplu).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 6: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Nu este arbore (exista un ciclu A - C - E - A)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 7: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Nodul care nu are parinte se numeste radacina. Intr-un arboreexista o singura radacina.

Nodurile care nu au descendenti se numesc frunze.

Inaltimea arborelui este cel mai lung drum (ca numar delegaturi) de la radacina la o frunza.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 8: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Radacina

- nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 9: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze -

nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 10: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:

G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 11: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D:

A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 12: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui:

3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 13: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Terminologie

Radacina - nodul cu A

Frunze - nodurile cu B, E, F, G, K, L, I, J

Descendentii lui D:G, H, I , J

Parintele lui D: A

Inaltimea arborelui: 3

Sunt 12 noduri si 11 legaturi

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 14: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

In functie de numarul maxim de descendenti care pot existapentru un nod, putem vorbi de:

Arbore Binar (maxim 2 descendenti - care se numescdescendent stang si descendent drept)

Arbore N-ar (mai mult de 2 descendenti)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 15: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbore Binar

Exemplu de Arbore Binar

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 16: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbore N-ar

Exemplu de Arbore N-ar

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 17: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Operatii pentru arbori

Intr-un arbore (binar sau n-ar) nu aveam acele operatii cu caresuntem obisnuiti de la celelalte structuri de date:

Nu aveam adaugare

Nu avem stergere

Nu avem cautare

etc.

Motivul este ca arbori (arbore n-ar si arbore binar simplu) nuprea sunt folositi ca reprezentare pentru containere.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 18: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Atunci la ce putem folosi arbori, daca nu la reprezentarea unorcontainere?

Arbori n-ari pot fi folositi ın probleme de cautare

Arbori binari pot fi folositi pentru reprezentare de arboregenealogic, de expresii aritmetice, etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 19: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Probleme de cautare

La problemele de cautare/optimizare cautam o solutie pentrudiferite probleme, pentru care nu putem gasi ın mod ”simplu”solutia

De exemplu: gasiti o solutie pentru problema canibalilor si amisionarilor: pe malul stang al unui rau se afla 3 canibali si 3misionari. Ei trebuie sa ajunga la malul drept folosind o barcaın care ıncap maxim 2 persoane (incluzand persoana careconduce barca). Daca la un moment dat pe un mal sunt maimulti canibali decat misionari, ei vor manca misionarii. Gasitio modalitate de a traversa raul.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 20: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Probleme de cautare

Pentru a rezolva o problema cu metode de cautare, estenecesara modelarea problemei:

Trebuie sa existe un spatiu al starilor posibile

Trebuie sa avem o stare initiala

Trebuie sa avem una sau mai multe stari finale

Trebuie sa putem ajunge dintr-o stare ıntr-o alta stare

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 21: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Canibali si misionari

Putem reprezenta o stare din aceasta problema prinspecificarea persoanelor pe malul drept si pe malul stang (sitrebuie sa stim unde e barca).

Notam misionarii cu MNotam canibalii cu CNotam barca cu BNotam raul cu

Astfel starea initiala (de unde pornim) e MMMCCCB (toatalumea e la malul stang)

Iar starea finala (unde vrem sa ajungem) este MMMCCCB(toata lumea e la malul drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 22: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Canibali si misionari

Dintr-o stare putem ajunge ın starea urmatoare daca 1 sau 2persoane trec cu barca pe celalalt mal.

De exemplu, din starea initiala MMMCCCB putem ajunge ınurmatoarele stari

MMMCC CB (1 canibal trece pe malul drept)MMMC CCB (2 canibali trec pe malul drept)MMCCC MB (1 misionar trece pe malul drept)MCCC MMB (2 misionari trec pe malul drept)MMCC MCB (1 misionar si 1 canibal trece pe malul drept)

Putem construi un arbore din stari, unde radacina este stareainitiala, si starile ın care putem ajunge dintr-o stare reprezintadescendentii lui.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 23: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Canibali si misionari

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 24: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Probleme de cautare

Scopul nostru este sa gasim un drum, de la starea initiala la ostare finala

Pentru a gasi acest drum, trebuie sa parcurgem arborele(adica sa vizitam, toate nodurile - pana gasim cel cautat).

Exista 2 variante simple de parcurgere:

Parcurgere ın adancime (DFS - Depth First Search)

Parcurgere ın latime (BFS - Breadth First Search)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 25: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Parcurgerea ın adancime este o parcurgere ın care luam primuldescendent al unui nod, dupa care luam primul descendent alacestui nod, si asa mai departe pana ajungem la o frunza.

Dupa ce ajungem la o frunza, urcam ınapoi la parinte si dacamai are noduri nevizitate, luam pe primul si iar coboram panala o frunza.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 26: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Sa vedem pas cu pas parcurgerea ın adancime pentru arborelede mai sus.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 27: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Incepem cu radacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 28: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui A, C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 29: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui C, E.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 30: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui E, B.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 31: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Continuam cu primul descendent al lui B, I.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 32: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

I nu are descendent (deci nu putem merge ın jos), urcam la B.B nu are alt descendent, urcam la E. E are alt descendent,deci mergem pe G.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 33: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

G nu are descendent, urcam la E. E nu mai are alt descendent,urcam la C. C are alt descendent, deci mergem pe F.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 34: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

F nu are descendent, urcam la C. C nu are alt descendent,urcam la A. A are alt descendent, mergem pe D.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 35: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Mergem pe primul descendent al lui D, X.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 36: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

X nu are descendent, urcamam la D. Mergem pe al 2-leadescendent al lui D, H.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 37: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Mergem pe primul descendent al lui H, K.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 38: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

K nu are descendent, urcam la H. H are alt descendent,coboram pe L.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 39: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

L nu are descendent, urcam la H. H nu are alt descendent,urcam la D. D nu are alt descendent, urcam la A. A nu are altdescendent, dar nici parinte, deci am terminat de parcursnodurile.

Ordinea ın care am parcurs nodurile este: A, C, E, B, I, G, F,D, X, H, K, L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 40: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgerea ın adancime

Pe desen pare simplu. Nici implementarea nu este maicomplicata. Pur si simplu avem nevoide de o stiva ın carepunem nodurile.

Pornim cu o stiva ın care punem radacina arborelui.

Cat timp stiva nu este vida scoatem un element din stiva(vizitam nodul corespunzator)

Daca nodul scos din stiva are descendenti, adaugamdescendentii lui ın stiva.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 41: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Adaugam ın Stiva radacina. Presupunem ca un nod estevizitat, cand este sters din stiva.

Stiva: ALect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 42: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (A), ıl vizitam, si adaugamdescendentii lui A ın stiva (de la dreapta la stanga).

Stiva: D, C

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 43: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (C), ıl vizita, si adaugamdescendentii lui C ın stiva (de la dreapta la stanga).

Stiva: D, F, E

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 44: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (E), ıl vizita, si adaugamdescendentii lui E ın stiva (de la dreapta la stanga).

Stiva: D, F, G, B

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 45: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (B), ıl vizita, si adaugamdescendentul lui B ın stiva

Stiva: D, F, G, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 46: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (I), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca I nu are descendenti.

Stiva: D, F, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 47: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (G), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca G nu are descendenti.

Stiva: D, F

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 48: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (F), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca F nu are descendenti.

Stiva: D

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 49: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (D), ıl vizitam, si adaugam ınstiva descendentii lui D (de la dreapta la stanga)

Stiva: H, X

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 50: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (X), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca X nu are descendenti.

Stiva: H

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 51: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (H), ıl vizitam, si adaugamdescendentii lui H ın stiva (de la dreapta la stanga)

Stiva: L, K

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 52: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (K), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca K nu are descendenti.

Stiva: L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 53: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stergem din stiva un element (L), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca L nu are descendenti.

Stiva:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 54: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın adancime

Stiva este vida, deci am terminat de parcurs toate nodurile.

Ordinea ın care am parcurs nodurile este: A, C, E, B, I, G, F,D, X, H, K, L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 55: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Cealalta parcurgere des ıntalnita la arbori n-ari esteparcurgerea ın latime.

Pornim de la radacina.

Vizitam pe rand toti descendentii radacinii, dupa aceeadescendentii descendentilor si asa mai departe.

Practic, doar cand terminam cu toate nodurile de pe un nivel,trecem la nodurile de pe nivelul urmator.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 56: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 57: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 58: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 59: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 60: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 61: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 62: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 63: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 64: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 65: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 66: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 67: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 68: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Implementarea parcurgerii ın latime este identica cuimplementarea parcurgerii ın adancime, doar se foloseste ocoada ın loc de stiva:

Pornim cu o coada ın care punem radacina arborelui.

Cat timp coada nu este vida scoatem un element din coada(vizitam nodul corespunzator)

Daca nodul scos din coada are descendenti, adaugamdescendentii lui ın coada.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 69: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Adaugam ın coada radacina. Presupunem ca un nod estevizitat, cand este sters din coada.

Coada: A

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 70: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (A), ıl vizitam, si adaugamdescendentii lui A ın coada.

Coada: C, D

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 71: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (C), ıl vizitam, si adaugamdescendentii lui C ın coada

Coada: D, E, F

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 72: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (D), ıl vizitam, si adaugamdescendentii lui D ın coada

Coada: E, F, X, H

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 73: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (E), ıl vizitam, si adaugamdescendentii lui E ın coada

Coada: F, X, H, B, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 74: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (F), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca F nu are descendenti.

Coada: X, H, B, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 75: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (X), ıl vizitam, si nu adaugamnimic ın stiva, pentru ca X nu are descendenti.

Coada: H, B, G

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 76: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (H), ıl vizitam, si adaugam ıncoada descendentii lui H.

Coada: B, G, K, L

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 77: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (B), ıl vizitam, si adaugam ıncoada descendentul lui B

Coada: G, K, L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 78: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (G), ıl vizitam, si nu adaugamnimic ın coada, pentru ca G nu are descendenti.

Coada: K, L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 79: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (K), ıl vizitam, si nu adaugamnimic ın coada

Coada: L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 80: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (L), ıl vizitam, si nu adaugamnimic ın coada, pentru ca L nu are descendenti.

Coada: I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 81: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Stergem din coada un element (I), ıl vizitam, si nu adaugamnimic ın coada, pentru ca I nu are descendenti.

Coada:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 82: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın latime

Coada este vida, deci am terminat de parcurs toate nodurile.

Ordinea ın care am parcurs nodurile este: A, C, D, E, F, X, H,B, G, K, L, I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 83: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori binari

Un arbore ın care fiecare nod are maxim 2 descendenti, senumeste arbore binar.

Pentru un arbore binar avem nume pentru descendenti, existadescendent/fiu stang si descendent/fiu drept.

Daca un nod are un singur descendent, trebuie specificat dacae fiul stang sau cel drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 84: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori binari - Terminologie

Un arbore binar se numeste plin daca pe fiecare nivel arenumarul maxim de noduri posibile.

Un arbore binar plin cu k niveluri, are 2k − 1 noduri.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 85: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori binari - Terminologie

Un arbore binar se numeste complet daca poate fi obtinutdintr-un arbore binar plin, eliminand niste noduri de la ultimulnivel, de la dreapta spre stanga (sa avem structura deansamblu).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 86: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori binari - Terminologie

Un arbore binar se numeste degenerat daca are n noduri pe nniveluri (si ınaltime n − 1).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 87: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori binari - Parcurgere

Pe langa cele 2 parcurgeri discutate pentru un arbore n-ar(DFS si BFS), la un arbore binar mai exista 3 parcurgeri:

Parcurgere ın preordine

Parcurgere ın inordine

Parcurgere ın postordine

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 88: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine I

La parcurgere ın preordine tot timpul se viziteaza prima dataparintele, dupa care subarborele stang, dupa care subarboreledrept. Cand vizitam subarbori, tot ın preordine le vizitam.

Sa vedem un exemplu concret

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 89: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine II

Incepem cu radacina (dupa care vizitam subarborele stang -tot ın preordine - si subarborele drept - tot ın preordine).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 90: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine III

Continuam cu subarborele stang (aici iar vizitam radacina,subarbore stang si subarbore drept).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 91: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine IV

Continuam cu subarbore stang al lui B (radacina, subarborestang, subarbore drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 92: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine V

Continuam cu subarborele stang al lui D (radacina, subarborestang, subarbore drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 93: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine VI

E nu are descendenti, mergem ınapoi la D si vizitamsubarborele drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 94: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine VII

F nu are descendenti, mergem ınapoi la B, si vizitamsubarborele drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 95: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine VIII

I nu are descendenti, urcam la A si vizitam subarborele drept(radacina, subarbore stang, subarbore drept).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 96: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine IX

Mergem pe subarbore stang al lui C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 97: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine X

G nu are subarbore stang, mergem pe cel drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 98: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine XI

J nu are descendenti, urcam la C si vizitam subarborele drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 99: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine XII

Acum am vizitat toate nodurile. Ordinea ın care ele au fostvizitate: A, B, D, E, F, I, C, G, J, H (aceeasi ordine ca laDFS, pentru ca DFS e un fel de parcurgere preordine).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 100: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine XIII

Subalgoritmul de parcurgere poate fi implementat cel mai usorın mod recursiv. Pentru implementare ne trebuie oreprezentare pentru un arbore. Arborele fiind alcatuit dinnoduri, ne trebuie structura nod:

Nod:info: TElemstang: ↑ Noddrept: ↑ Nod

Iar arborele binar nu are altceva decat o radacina

ArboreBinar:rad: ↑ Nod

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 101: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine XIV

Cand lucram recursiv cu arbori binari ın general functiarecursiva primeste ca parametru un nod.

subalgorithm preordineRecursiv (nod: ↑ Nod) is://nod este un nod. Poate fi NIL

if nod 6= NIL thenprint [nod].infopreordineRecursiv([nod].stang)preordineRecursiv([nod].drept)

end ifend subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 102: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın preordine XV

Dar avem nevoie si de functia care primeste ca parametru unarbore, si care apeleaza functia recursiva (porneste apelulrecursiv) cu radacina arborelui.

subalgorithm parcurgePreordine() is:preordineRecursiv(this.rad)

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 103: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine I

La parcurgere ın inordine tot timpul se viziteaza prima datasubarborele stang, urmat de parintele, urmat de subarboreledrept. Cand vizitam subarbori, tot ın inordine le vizitam.

Sa vedem un exemplu concret:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 104: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine II

Incepem cu subarbore stang de la radacina. Subarborele tot ıninordine se viziteaza, deci ıncep cu subarborele stang si asamai departe, pana gasesc un nod care nu are subarbore stang.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 105: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine III

Dupa subarbore stang vizitat, vizitam radacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 106: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine IV

Continuam cu subarbore drept al lui D.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 107: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine V

Continuam cu B (care are subarborele stang vizitat deja).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 108: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine VI

Mergem pe subarborele drept de la B.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 109: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine VII

Radacina A are deja subarborele stang vizitat, acum vizitamA-ul.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 110: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine VIII

Mergem pe subarbore drept de la A. Aici iar ne trebuiesubarbore stang prima data, si cum G nu are subarbore stang,G va fi primul nod vizitat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 111: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine IX

Mergem pe subarbore drept al lui G.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 112: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine X

Acum putem vizita C (avem subarborele stang vizitat deja)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 113: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine XI

La final mai vizitam subarbore drept de la C, H.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 114: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine XII

Acum am vizitat toate nodurile. Ordinea ın care ele au fostvizitate: E, D, F, B, I, A, G, J, C, H

Implementarea parcurgerii se face similar cu preordine, sifolosim aceeasi reprezentare.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 115: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine XIII

subalgorithm parcurgeInordine() is:inordineRecursiv(this.rad)

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 116: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın inordine XIV

subalgorithm inordineRecursiv (nod: ↑ Nod) is//nod este un nod. Poate fi NIL

if nod 6= NIL theninordineRecursiv([nod].stang)print [nod].infoinordineRecursiv([nod].drept)

end ifend subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 117: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine I

La parcurgere ın postordine tot timpul se viziteaza prima datasubarbore stang, urmat de subarbore drept, si la final radacina.

Sa vedem un exemplu concret

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 118: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine II

Incepem cu subarbore stang si prima data vizitam nodul E.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 119: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine III

Continuam cu subarborele drept al radacinii lui E, adica D.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 120: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine IV

Dupa ce am vizitat subarborele drept si stang vizitamradacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 121: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine V

Continuam cu subarborele stang al lui B.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 122: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine VI

Acum vizitam B (subarborele stang si drept e vizitat deja).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 123: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine VII

Am vizitat subarborele stang pentru radacina A, acum vizitamsubarborele drept. Incepem cu J.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 124: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine VIII

Putem vizita G (subarbore stang nu are, cel drept este vizitat).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 125: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine IX

Mergem pe subarbore drept al lui C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 126: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine X

Vizitam C.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 127: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine XI

La final vizitam radacina A.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 128: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine XII

Acum am vizitat toate nodurile. Ordinea ın care ele au fostvizitate: E, F, D, I, B, J, G, H, C, A.

Implementarea parcurgerii se face similar cu preordine siinordine, si folosim aceeasi reprezentare.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 129: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine XIII

subalgorithm parcurgePostordine() ispostordineRecursiv(this.rad)

end subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 130: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Parcurgere ın postordine XIV

subalgorithm postordoneRecursiv (nod: ↑ Nod) is//nod este un nod. Poate fi NIL

if nod 6= NIL thenpostordineRecursiv([nod].stang)postordineRecursiv([nod].drept)print [nod].info

end ifend subalgorithm

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 131: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Preordine, inordine, postordine

Cele 3 parcurgeri pot fi retinute cel mai usor asa:

Subarborele stang(S) este vizitat tot timpul ınainte desubarborele drept (D).

Pozitia radacinii (R) se modifica:

PREordine: R, S, DINordine: S, R, DPOSTordine: S, D, R

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 132: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Intrebare I

Daca am pentru un arbore parcurgerea ın inordine si ınpreordine, cum pot reconstrui arborele?

Cum arata arborele care are urmatoarele noduri:

J I B A G F H D C E (inordine)

A B I J C D F G H E (preordine)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 133: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Intrebare II

Idee:

Din preordine stiu care e radacina (A).

Inordine este S, R, D, daca stiu radacina, pot gasi sanga (J IB) si dreapta (G F H D C E)

Deci subarborele stang contine J I B (inordine) B I J(preordine)

Subarborele drept contine G F H D C E (inordine) C D F G HE (preordine)

Continuam recursiv

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 134: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Intrebare III

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 135: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman

O problema ın care se folosesc arbori binari este codificareaHuffman: avand un text, vrem sa-i atribuim un cod binar(adica o secventa de 0 si 1) fiecarui simbol (litera) din text.

In codificare Huffman, codurile au lungimi diferite, ın principiuvrem ca acele simboluri care apar mai des, sa primeasca uncod mai scurt.

Daca codurile au lungimi diferite, nu orice secventa de 0 si 1reprezinta un cod valid: nici-un cod nu poate sa fie prefixulunui alt cod.De exemplu - daca avem urmatoarele coduri:

a - 01b - 11c - 1101d - 1

daca vrem sa decodam textul 110101 nu stim daca este:ddaa, sau ca, sau baa

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 136: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman

Pentru codificare Huffman avem nevoie de un text ın care sanumaram frecventele simbolurilor (sau ne trebuie directfrecventele).

Pentru fiecare simbol cream un arbore binar format doardintr-un nod (care contine simbolul respectiv).

Adaugam aceste arbori ıntr-o coada cu prioritati, iarprioritatea pentru fiecare arbore este frecventa simbolului.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 137: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman

Cat timp ın coada cu prioritati sunt minim 2 elemente,stergem din coada arborii cu prioritatea minima. Construimdin acesti doi arbori un arbore nou, care are acesti 2 arbori cadescendent stang si drept. Punem noul arbore ınapoi ın Coadacu prioritati si prioritatea lui este suma prioritatilor pentru cei2 arbori uniti.

La final, cand coada cu prioritati contine un singur element,acel arbore ne da codurile. Fiecare frunza din arbore contineun simbol, iar codul simbolului este construit traversand de laradacina spre nodul frunza, adaugand ın cod 0 cand mergempe stanga si 1 cand mergem pe dreapta.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 138: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Sa codificam textul: ana are mere (fara spatii)

Prima data avem nevoie de literele si frecventa lor:

a - 3n - 1r - 2e - 3m - 1

Vom consturi cate un arbore binar pentru fiecare simbol,alcatuit doar dintr-un singur nod:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 139: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Sa codificam textul: ana are mere (fara spatii)

Prima data avem nevoie de literele si frecventa lor:

a - 3n - 1r - 2e - 3m - 1

Vom consturi cate un arbore binar pentru fiecare simbol,alcatuit doar dintr-un singur nod:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 140: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Sa codificam textul: ana are mere (fara spatii)

Prima data avem nevoie de literele si frecventa lor:

a - 3n - 1r - 2e - 3m - 1

Vom consturi cate un arbore binar pentru fiecare simbol,alcatuit doar dintr-un singur nod:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 141: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Adauga aceste noduri ıntr-o Coada cu Prioritati ın careprioritatea va fi frecventa simbolului (cifra de dupa litera)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 142: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati (arborele cu n siarborele cu m) le unim si punem arborele rezultat ınapoi ıncoada cu prioritatea 2

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 143: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati (cei doi arbori cuprioritatea 2) le unim si punem arborele rezultat ınapoi ıncoada cu prioritatea 4

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 144: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati (cei doi arbori cuprioritatea 3) le unim si punem arborele rezultat ınapoi ıncoada cu prioritatea 6

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 145: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Stergem 2 elemente din coada cu prioritati le unim si avem unsingur arbore

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 146: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Pentru a determina codul pentru fiecare simbol, traversam dela radacina la o frunza, adunam 0 la cod cand mergem pesubarborele stang si 1 cand mergem pe cel drept.

a - 00

e - 01

n - 100

m - 101

r - 11

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 147: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Pentru a decoda un mesaj, pornim de la radacina si mergemın stanga daca codul curent este 0 si ın dreapta daca codul e1. Cand ajungem la o frunza, am decodat o litera, reıncepemde la radacina.

Sa decodam codul: 10100110101

Pornim de la radacina. Codul curent este 1, mergem ladreapta, de acolo stanga si iar dreapta. Am ajuns la litera m.

Continuam de la radacina cu restul codului: 00110101

etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 148: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Codificare Huffman - exemplu

Pentru a decoda un mesaj, pornim de la radacina si mergemın stanga daca codul curent este 0 si ın dreapta daca codul e1. Cand ajungem la o frunza, am decodat o litera, reıncepemde la radacina.

Sa decodam codul: 10100110101

Pornim de la radacina. Codul curent este 1, mergem ladreapta, de acolo stanga si iar dreapta. Am ajuns la litera m.

Continuam de la radacina cu restul codului: 00110101

etc.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 149: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbore Binar de Cautare - ABC

Un Arbore Binar de Cautare (ABC) este un arbore binar ıncare pentru fiecare nod, nodurile din subarborele stang continelemente mai mici (sau egale) decat el, si nodurile dinsubarborele drept contin elemente mai mare decat el.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 150: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Exemplu de ABC

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 151: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC

Pot exista mai multi ABC-uri cu exact aceleasi elemente darcare au structura diferita.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 152: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC

Daca parcurgem un ABC ın inordine (stanga, radacina,dreapta), vom avea toate elementele ın ordine crescatoare.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 153: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC

Pentru un ABC putem avea operatii care nu au existat laarbori n-ari sau arbori binari:

adaugarestergerecautare

ABC poate fi folosit ca reprezentare pentru containereordonate ın care nu exista pozitii*: multime ordonata, colectiaordonata, dictionar ordonat, etc.

*se poate implementa si o lista ordonata pe ABC, dar e un picmai complicat (si nu vom discuta aceasta implementare)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 154: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - reprezentare

Reprezentarea pentru un ABC este similara cu reprezentareaunei arbori binari simple: avem nevoie de structura Nod, siavem nevoie de structura ABC.

Nod:info: TElemstang: ↑ Noddrept: ↑ Nod

ABC:rad: ↑ Nod

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 155: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare

Cum putem verifica daca un element apare sau nu ın ABC(adica daca am un nod care contine elementul respectiv)?

Mecanismul este similar cu cautarea binara: pornesc de laradacina si continui ori pe subarborele stang, ori pe cel drept,ın functie de cum este elementul cautat fata de cel din nodulcurent.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 156: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare

Cum putem verifica daca un element apare sau nu ın ABC(adica daca am un nod care contine elementul respectiv)?

Mecanismul este similar cu cautarea binara: pornesc de laradacina si continui ori pe subarborele stang, ori pe cel drept,ın functie de cum este elementul cautat fata de cel din nodulcurent.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 157: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare I

Sa cautam elementul 15 ın arborele de mai jos

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 158: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare II

Pornim cu un nod curent, care este radacina.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 159: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare III

Daca nodul curent nu contine elementul cautat, comparamelementul cautat cu elementul din nodul curent. Dacaelementul cautat este mai mic, continuam ın subarbore stang(nod curent devine stangul lui nod curent), altfel continuamın subarbore drept. Din moment ce 10 < 15, mergem pesubarbore drept.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 160: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare IV

Continuam pe subarborele stang (15 < 30)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 161: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare V

Continuam pe subarborele stang (15 < 20)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 162: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare VI

Am gasit nodul, deci cautarea a fost cu succes.

Daca am fi cautat elementul 16, tot la fel am fi facut (16 >10, 16 < 30, 16 < 20), dar cand nodul curent era 15,continuam pe subarborele drept, care nu exista. Cand nodulcurent devine NIL, putem spune ca elementul nu se gaseste ınarbore.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 163: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare

function cautare(elem: TElem) is://elem este elementul cautat

curent: ↑ Nodcurent = this.rad //curent este ↑ Nodwhile curent 6= NIL AND [curent].info 6= elem execute

if elem < [curent].info thencurent = [curent].stang

elsecurent = [curent].drept

end ifend whileif curent == NIL then

return Falselse

return Adevaratend if

end function

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 164: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare

Cat este complexitatea algoritmului de cautare?

Desi tindem sa credem ca la un ABC complexitatea va filogaritmica, din moment ce putem avea si arbori degenerati (nnoduri pe n nivele), complexitatea ın caz defavorabil este defapt Θ(n).

In caz mediu, complexitatea este Θ(log2n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 165: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Cautare

Cat este complexitatea algoritmului de cautare?

Desi tindem sa credem ca la un ABC complexitatea va filogaritmica, din moment ce putem avea si arbori degenerati (nnoduri pe n nivele), complexitatea ın caz defavorabil este defapt Θ(n).

In caz mediu, complexitatea este Θ(log2n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 166: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare I

Cum adaugam un element nou ıntr-un ABC?

Noul element va fi obligatoriu o frunza, si trebuie sa cautamnodul la care ıl adaugam ca frunza. Tot timpul exista unsingur astfel de nod.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 167: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare II

Sa adaugam elementul 6.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 168: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare III

Pornim de la radacina. Vom folosi 2 noduri: nod curent(portocaliu) si parintele nodului curent (albastru). Initialnodul curent este radacina si parintele de NIL.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 169: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare IV

La fiecare pas parintele ia valoarea nodului curent, iar nodulcurent merge pe stanga sau dreapta ın functie de comparatiaelementului de adaugat cu elementul din nodul curent. Aici,din moment ce 6 < 10 mergem pe stanga

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 170: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare V

6 < 8, mergem pe stanga.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 171: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare VI

6 > 4, mergem pe dreapta.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 172: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare VII

6 < 7, mergem pe stanga.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 173: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare VIII

Acum nodul curent este NIL, ceea ce ınseamna ca stim ca lanodul parinte (cercul albastru) trebuie sa adaugamdescendentul. Comparam valoarea din parinte cu elementul deadaugat ca sa stim daca ıi adaugam descendent stang saudrept (stang la noi).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 174: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare IX

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 175: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare

subalgorithm adauga(elem: TElem) is://elem este elementul de adaugat

nodNou, curent, parinte: ↑ Nod[nodNou].info = elem[nodNou].stang = NIL[nodNou].drept = NILif this.rad == NIL then

this.rad = nodNouelse

curent = this.radparinte = NIL //curent si parinte sunt ↑ Nodwhile curent 6= NIL execute

parinte = curentif elem ≤ [curent].info then

curent = [curent].stangelse

curent = [curent].dreptend if

end while//continuam pe pagina urmatoareLect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 176: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare

if elem ≤ [parinte].info then[parinte].stang = nodNou

else[parinte].drept = nodNou

end ifend if

end subalgorithm

Complexitate:

O(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 177: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Adaugare

if elem ≤ [parinte].info then[parinte].stang = nodNou

else[parinte].drept = nodNou

end ifend if

end subalgorithm

Complexitate: O(n)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 178: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere

Stergerea este o operatie un pic mai complicata, pentru catrebuie sa ne asiguram ca nu stricam arborele.

La stergere prima data cautam nodul pe care vrem sa-lstergem si avem 3 cazuri:

Nodul nu are descendenti deloc

Nodul are un singur descendent

Nodul are 2 descendenti

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 179: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere I

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 180: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere II

Daca nodul de sters nu are descendenti, ıl putem sterge faraprobleme.

De exemplu daca vrem sa stergem nodul 7.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 181: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere III

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 182: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere IV

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 183: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere V

Daca nodul de sters are un singur descendent, atunci legamacest descendent de parintele nodului.

De exemplu daca vrem sa stergem nodul 20.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 184: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere VI

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 185: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere VII

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 186: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere VIII

Daca vrem sa stergem un nod cu 2 descendenti avem 2optiuni (ambele sunt corecte, oricare poate fi folosita):

Cautam elementul maxim din subarbore stang, ınlocuimcontinutul nodului de sters cu acest maxim, si stergem nodulcu maxim.

Cautam elementul minim din subarbore drept, ınlocuimcontinutul nodului de sters cu acest minim, si stergem nodulcu minim.

Sa stergem nodul 10.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 187: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere IX

Maximul din stanga, este elementul cel mai la dreapta dinsubarborele stang (pornesc pe subarborele stang si merg peramura dreapta pana dau de un nod fara descendent drept)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 188: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere X

Mutam 9 ın radacina, si stergem nodul cu 9.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 189: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere XI

Cealalta varianta:

Minimul din dreapta, este elementul cel mai la staga dinsubarborele drept (pornesc pe subarborele drept si merg peramura stanga pana dau de un nod fara descendent stang)

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 190: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

ABC - Stergere XII

Mutam 15 ın radacina, si stergem nodul cu 15.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 191: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori echilibrati

Am vazut ca la ABC avem complexitate O(n) pentru operatii.

Daca vrem sa asiguram complexitate O(log2n) pentru operatiitrebuie sa ne asiguram ca ABC-ul este echilibrat:

Diferenta de ınaltime dintre subarborele stang si cel drept este1, 0 sau -1.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 192: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori echilibrati

Este echilibrat.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 193: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori echilibrati

Nu este echilibrat (8 are adancime 2 la stanga si 0 la dreapta).

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 194: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori echilibrati I

Pentru a avea arbori echilibrati, dupa operatii de adaugare sistergere, daca se strica echilibrul, aplicam rotatii.

De exemplu:

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 195: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori echilibrati II

Adaugam 13 si nu mai este echilibrat

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE

Page 196: PROGRAMARE S˘I STRUCTURI DE DATEmarianzsu/Postuniv/Curs/Curs07.pdfDe exemplu: g asit˘i o solut˘ie pentru problema canibalilor ˘si a misionarilor: pe malul st^ang al unui r^au se

Arbori n-ariArbori binari

Arbori echilibrati III

Aplicam o rotatie la nodul 20.

Lect. dr. Onet - Marian Zsuzsanna PROGRAMARE SI STRUCTURI DE DATE