Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
în adâncime pe niveluri
preordine postordine
inordine
Parcurgerea pe niveluri
Se vizitează întâi rădăcina, apoi fiul stâng al rădăcinii,
apoi cel drept şi se continuă în acest mod, vizitând
nodurile de pe fiecare nivel de la stânga la dreapta.
Pentru arborele prezentat în figură, şirul parcurgerii pe
niveluri este:1 2 3 4 5 6 7 8.
Parcurgerea în adâncime
În preordine (RSD): se vizitează rădăcina, apoi tot în
preordine se vizitează nodurile subarborelui stâng şi
apoi acele ale subarborelui drept.
Exemplu (parcurgerea în preordine a arborelui din
figură):1, 2, 4, 7, 3, 5, 6, 8.
Parcurgerea în adâncime
În inordine (SRD): se vizitează în inordine nodurile
subarborelui stâng, apoi rădăcina, şi apoi tot în inordine,
nodurile subarborelui drept.
Exemplu (parcurgerea în inordine a arborelui din
figură): 4, 7, 2, 1, 5, 3, 8, 6.
Parcurgerea în adâncime
În postordine (SDR): se vizitează în postordine
nodurile subarborelui stâng, apoi tot în postordine,
nodurile subarborelui drept şi, la sfârşit rădăcina.
Exemplu (parcurgerea în postordine a arborelui din
paragraful precedent):7, 4, 2, 5, 8, 6, 3, 1.
Crearea arborelui binar
Crearea unui arbore binar alocat dinamic se realizează cel
mai uşor aplicând următoarea schemă:
- se generează un nod, adică se alocă spaţiu în heap şi se
încarcă informaţia;
- pentru fiecare nod se construieşte subarborele său stâng, apoi
subarborele său drept şi se completează adresele
descendenţilor nodului cu adresele acestor subarbori;
- un descendent vid trebuie marcat printr-o proprietate stabilită
asupra informaţiei (spre exemplu apariţia valorii 0 drept
conţinut informaţional al nodului curent).
Spre exemplu, pentru arborele binar prezentat în figură
şirul datelor furnizat la intrare va arăta astfel:
12407000350068000
ceea ce corespunde unei liste în preordine a nodurilor.
Parcurgere arbore binar
void RSD(ARB *r) //Parcurgere preordine void SRD(ARB *r) //Parcurgere inordine
{ {
if(r) if(r)
{ {
cout<<r->inf<<" "; RSD(r->st); RSD(r->dr); SRD(r->st); cout<<r->inf<<" "; SRD(r->dr);
} }
} }