Sunteți pe pagina 1din 8

Parcurgerea arborilor binari

Operatiile de parcurgere a arborilor binari se simplifica mult daca vom


considera ca fiecare nod al arborelui subordoneaza un subarbore binar stang si un
subarbore binar drept. Avand in vedere aceasta observatie se vor defini
subprograme recursive care utilizeaza tehnica Divide et Impera.
Principalele modalitati de parcurgere ale unui arbore binar sunt:
A) Arborii binari pot fi parcursi prin metode specifice grafurilor: in adancime,
latime.
B) Metode specifice arborilor binari :
Parcurgerea in inordine (stanga varf dreapta SVD) se parcurge mai intai
subarborele stang, apoi varful, apoi subarborele drept.
Parcurgerea in preordine (varf- stanga dreapta VSD) se parcurge mai
intai varful, apoi subarborele stang, apoi subarborele drept.
Parcurgerea in postordine (stanga dreapta varf SDV) se parcurge mai
intai subarborele stang, apoi subarborele drept si la sfarsit varful.
Solutiile de parcurgere ale arborelui din figura urmatoare :

1
2
4

3
5

7
8

parcurgere svd - in inordine


42516378
parcurgere vsd - in preordine
12453678
parcurgere sdv - in postordine
45268731

Parcurgerea arborilor binary


Parcurgerile sunt cele mai frecvent utilizate operaii pe arbori. A parcurge un arbore
nseamn a vizita fiecare nod al arborelui o singur dat, n scopul prelucrrii informaiei
asociate nodului.
Exist mai multe posibiliti de parcurgere a arborilor- n adncime (preordine, inordine,
postordine) sau pe niveluri, dar n toate cazurile att arborele, ct i subarborii sunt prelucrai n
acelai mod.
Principalele moduri de parcurgere a arborilor binari sunt:

parcurgerea n adncime; i

parcurgerea pe niveluri.

Figura nr. 1 Parcurgerea arborilor binari

1. Parcurgerile n adncime
n toate cele trei tipuri de parcurgere n adncime se viziteaz mai nti
subarborele stng, apoi subarborele drept. Diferena const n poziia rdcinii fa de cei doi
subarbori. Fie scrise recursiv, fie iterativ, procedurile de parcurgere n adncime necesit o stiv.
Clasificarea tipurilor de parcurgere n adncime:
Preordine (rsd):
Pentru a parcurge un arbore binar n preordine, se viziteaz mai nti rdcina, se
parcurge n preordine subarborele stng, apoi se parcurge n preordine subarborele drept.
Exemplu: Parcurgerea n preordine a arborelui din Figura nr.11 este: 1 2 4 5 3 6 7 8
Inordine (srd):
Pentru a parcurge n inordine un arbore binar, se parcurge n inordine subarborele
stng, se viziteaz radcina, apoi se parcurge n inordine subarborele drept.
Exemplu: Parcurgerea n inordine a arborelui din Figura nr.11 este: 4 2 5 1 6 3 7 8
Postordine (sdr):
Pentru a parcurge n postordine un arbore binar, se parcurge n postordine
subarborele stng, apoi cel drept, apoi se viziteaz rdcina.
Exemplu: Parcurgerea n postordine a arborelui din Figura nr.11 este: 4 5 2 6 8 7 3 1

Programul urmator genereaza un arbore binar memorat in heap si il parcurge prin cele 3
metode.
#include<iostream.h>
#include<conio.h>
struct nod{int nro;
nod*st,*dr;};

nod *r;
void svd(nod *c)
{if(c)
{svd(c->st);
cout<<c->nro<<" ";
svd(c->dr);
}
}
void vsd(nod *c)
{if(c)
{cout<<c->nro<<" ";
vsd(c->st);
vsd(c->dr);
}
}
void sdv(nod *c)
{if(c)
{sdv(c->st);
sdv(c->dr);
cout<<c->nro<<" ";
}
}
nod* citire_h()
{int nr;
nod*c;
cout<<"nr de ordine ";
cin>>nr;

if(nr)
{c=new nod;
c->nro=nr;
c->st=citire_h();
c->dr=citire_h();
return c;
}
else
return 0;
}
void main()
{clrscr();
r=citire_h();
cout<<endl<<"parcurgere svd - in inordine "<<endl;
svd(r);
cout<<endl<<"parcurgere vsd - in preordine "<<endl;
vsd(r);
cout<<endl<<"parcurgere sdv - in postordine "<<endl;
sdv(r);
getch();
}

2. Parcurgerea pe niveluri
Se viziteaz nti rdcina, apoi fiul stng al rdcinii, apoi cel drept i se continu n
acest mod vizitnd nodurile de pe fiecare nivel de la stnga la dreapta.
Exemplu: Parcurgerea n postordine a arborelui din Figura nr.11 este: 1 2 3 4 5 6 7 8

Arbori de cautare
Se numeste arbore de cautare un arbore binar ale carui noduri au o cheie de identificare,
iar pentru fiecare nod sunt valabile proprietatile urmatoare:
Orice cheie asociata unui nod este mai mare decat cheia subordonatului stang
Orice cheie asociata unui nod este mai mica decat cheia subordonatului drept
Cheile de identificare sunt distincte.
Fie arborele din figura urmatoare. Cheile sunt : 30, 21 , 27, 15, 37, 31, 33, 36, 35, 24

30
21
15

37
27

24

31
33
36
35

Observatie: ordinea de inserare a cheilor poate determina o alta configuratie pentru arbore. Spre
exemplu daca se insereaza mai intai 30 si apoi 27 si 21 atunci 27 va deveni subordonat stang
pentru 30 si 21 subordonat stang pentru 27.
Crearea arborilor de cautare se realizeaza aplicand de un numar de ori operatia de inserare.
Inserarea se realizeaza astfel:
-se compara valoarea k de inserat cu cheia asociata nodului curent. Exista urmatoarele
posibilitati:
- cheia coincide cu valoarea de inserat si se renunta la inserare
- cheia este mai mica decat k caz in care se incearca inserarea in subarborele drept
- cheia este mai mare decat k caz in care se incearca inserarea in subarborele stang
- inserarea propriuzisa se realizeaza atunci candsubarborele stang , respectiv drept, este
vid, altfel se reia.
Parcurgerea arborilor de cautare se face ca orice arbore binar (svd, vsd sdv).
Cautarea unei valori se determina in mod similar cu subprogramul de inserare.

#include<iostream.h>
#include<conio.h>
struct nod
{int nr_o;
nod*st,*dr;
};
nod *v;
int n,k;
void inserare(nod *&c,int k)
{if(c)
if(c->nr_o==k)
cout<<"nr deja inserat "<<endl;
else
if(c->nr_o<k)
inserare(c->dr,k);
else
inserare(c->st,k);
else
{c=new nod;
c->nr_o=k;
c->st=c->dr=0;}
}
void svd(nod *c) //parcurgere in inordine
{if(c)
{svd(c->st);
cout<<c->nr_o<<" ";
svd(c->dr);
}
}
int cautare(nod *c,int k)
{if(c)
if(c->nr_o==k)
return 1;
else
if(c->nr_o<k)
cautare(c->dr,k);
else
cautare(c->st,k);

else
return 0;
}
void main()
{//v=0;
cout<<"nr de noduri ";
cin>>n;
for(int i=1;i<=n;i++)
{cout<<"valoarea de inserat ";
cin>>k;
inserare(v,k);}
cout<<endl<<"arborele are urmatoarele noduri "<<endl;
svd(v);
cout<<endl<<"valoarea de cautat ";
cin>>k;
if(cautare(v,k))
cout<<"s-a gasit!";
else
cout<<"nu s-a gasit!";
getch();
}

S-ar putea să vă placă și