Arbori cu radacina
5 e radacina
Daca y este ascendentul lui x si exista muchia (x, y) atunci y se numeste ascendent direct a lui x sau
tatal lui y.
Un nod y care este descendent al nodului x se numeste fiu sau descendent direct daca in plus exista
muchia (x, y).
Se numeste inaltime unui arbore lungimea maxima a unui lant de la radacina la un nod al arborelui.
Reprezentarea arborilor
Pentru fiecare nod se memoreaza informatii despre ascendentii directi. Vom obtine un vector de tati
unde t(r)=0 iar t(k) este tatal nodului k.
1 2 3 4 5 6 7 8 9 10 11 12
T 2 3 0 5 2 4 1 9 3 1 9 11
Arbori binari
Se numeste arbore binar un arbore cu radacina in care fiecare nod cu exceptia frunzelor are cel mult
doi descedenti directi: descendentul stang si descendentul direct.
Obs: intr un arbore binar daca un nod are un singur descendent acesta este fie stang fie drept acest
lucru fiind precizat.
Proprietati:
Intr un arbore binar cu inaltimea h exista cel mult 2h+ 1-1 noduri
Pe fiecare nivel i se gasesc maxim 2inoduri.
Un arbore binar este o multime finitia de noduri in care exista un nod special numit radacina iar
celelalte noduri sunt grupate in doua multimi disjuncte A1 si A2 ( A1 A2) fiecare fiind la randul lor
arbori binari.
1. Arbore binar strict: este un arbore in care fiecare nod, cu exceptia frunzelor are exact 2
descendenti.
Proprietate: un arbore binar strict care are k frunze are numarul de noduri egal cu 2*k-1.
Proprietate: un arbore binar strict are mereu un numar impar de noduri.
2. Se numeste arbore binar plin: un arbore binar, care pe fiecare nivel k are exact 2k noduri.
Proprietate: arborele binar plin este un caz particular de arbore binar strict in care toate
frunzele sunt pe ultimul nivel.
Proprietate: un arbore binar plin cu k frunze are 2*k-1.
Proprietate: un arbore binar plin cu inaltimea h are 2h+ 1-1.
3. Arbore binar complet: este un arbore in care fiecare nivel k contine 2k noduri eventual cu
exceptia ultimului nivel, care poate avea mai putine noduri.
Proprietate: nodurile de pe ultimul nivel sunt deobicei notate in partea stanga.
4. Arbore binar degenerat: este un arbore binar care are proprietatea ca fiecare nod cu
exceptia frunzei are exact un descendent, fie stang, fie drept.
Proprietate: un arbore degenerat cu n noduri are n nivele.
5. Arbore binar echilibrat: este un arbore in care pt oricare nod numarul nodurilor din
subarborele stang difera de numarul nodurilor din subarborele drept cu cel mult o unitate.
Pentru fiecare nod din arbore se utilizeaza o variabila dinamica de tip structura in care se
memoreaza numarul nodului, sau orice informatie utila depsre nod.
Doua campuri de legatura de tip pointer reprezentand adresa nodului descendent stang respectiv
drept sau nul daca nu avem descendenti directi.
Struct nod
Int info;
};
if(x!=0)
r=new nod;
r->info=nr;
r->dr=NULL;
r->st=NULL;
cin>>y;
creare(r->st, y);
cin>>y;
creare(r->dr, y);
void afisare(nod * r)
if(r!=NULL)
cout<<r->info<<" ";
afisare(r->st);
afisare(r->dr);
Este necesar sa cunoastem adresa nodului radacina. Pornind de la acest aputem parcurge toate
nodurile arborelui.
Parcurgerile arborelui
Parcurgere:
1. Inordine SRD
2. Preordine RSD
3. Postordine SDR
1.Se viziteaza intai subarborele stang, dupa radacina, după subarborele drept.
1.Se viziteaza intai subarborele stang, dupa radacina, după subarborele drept.
1.Se viziteaza intai subarborele stang, dupa radacina, după subarborele drept.
Se numeste arbore binar de cautare un arbire binar in care fiecare nod are o cheie unica de
identificare care respecta urmatoarele conditii:
1.Pentru orice subarbore cheile nodurilor din subarborele stang sunt mai mici dechat cheia radacinii.
2.Pnetru orice subarbore cheile nodurilor din subarborele drept sunt mai mari decat cheia radacinii.
Obs: din definitie reiese reiese ca nu se pot repeta cheile arborelui. Daca dorim acest lucru vom
modifica definitia astfel incat in subarborele stang sau drept sa putem adauga elemente egale cu
radacina.
Daca parcurgem un arbore de cautare in inordine, valorile vor aparea in ordine crescatoare.
1. prelucrăm rădăcina;
2. parcurgem subarborele stâng și/sau subarborele drept.
Se citesc mai milte valori. Sa se formeze un arbore binar de cautare iar apoi sa se afiseze nodurile
arborelui in ordine crescatoare in fisierul arbore .out.
1. Daca arborele este vid. In acest caz nu putem realiza stergerea deoacere nodul cautat nu
se gaseste in arbore.
2. Daca arborele este nevid avem 3 situatii:
Daca valoarea cautata este mai mica decat cheia radacinii, continuam cautarea in
subarborele stang.
Daca valoarea este mai mare decat cheia radacinii, continuam cautarea in
subarborele drept.
Daca valoarea este egala cu cheia radacinii, atunci am gasit nodul cautat si vedem
daca:
a) Nodul este frunza: se va sterge nodul, iar adresa retinuta de parinte
pentru el va fi NULL.
b) Are doar subarbore stang, iar cel drept e NULL, atunci adresa retinuta de
parinte pentru el devine adresa subarborelui stang.
c) Are doar subarbore drept, iar cel stang e NULL, atunci adresa retinuta de
parinte pentru el devinde adresa subarborelui drept.
d) Daca si subarborele stang si cel drept sunt nevizi procedam in felul
urmator:
Gasim cel mai mare nod din subarborele stang(sau cel mai mic
nod din subarborele drept).
Copiem informatia acestuia in nodul pe care dorim sa il stergem
apoi stergem nodul identificat, ca fiind cel mai mare din
subarborele stang.
Se numeste arbore partial de cost minim, un arbore partial pentru care suma costurilor muchiilor
este minima.
Exemplu:
Algoritmul porneste de la o padure formata din n subarbori, fiecare nod formand initial un
subarbore.
Vom adauga succesiv muchii pana cand vom obtine un singur arbore(daca graful e conex) sau
pana cand acest lucru nu mai e posibil.
Se allege un nod neadaugat inca in arborele current pentru care muchia dintre el si un nod din
arbore are costul minim, apoi se adauga nodul in arbore.
In cazul in care toate nodurile au foist deja adaugate sau in cazul in care arborele nu este conex
si au fost deja adaugate toate nodurile componentei conexe atunci se incheie procedeul .