You are on page 1of 3

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 , 2, 1!, 3, 31, 33, 3",
3!, 2#



Observatie: ordinea de inserare a cheilor poate determina o alta configuratie
pentru arbore. Spre e$emplu daca se inserea%a mai intai 30 si apoi 2 si 21
atunci 2 va deveni subordonat stang pentru 30 si 21 subordonat stang pentru
2.

Crearea arborilor de cautare se reali%ea%a aplicand de un numar de ori
operatia de inserare. &nserarea se reali%ea%a astfel:
'se compara valoarea ( de inserat cu cheia asociata nodului curent. )$ista
urmatoarele posibilitati:
' cheia coincide cu valoarea de inserat si se renunta la inserare
' cheia este mai mica decat ( ca% in care se incearca inserarea in
subarborele drept
' cheia este mai mare decat ( ca% in care se incearca inserarea in
subarborele stang
' inserarea propriu%isa se reali%ea%a 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 nr0o1
nod2st,2dr1
31

nod 2v1
int n,(1

void inserare*nod 24c,int (+
/if*c+
if*c'.nr0o55(+
cout--6nr de7a inserat 6--endl1
else
if*c'.nr0o-(+
inserare*c'.dr,(+1
else
inserare*c'.st,(+1

else
/c5ne8 nod1
c'.nr0o5(1
c'.st5c'.dr5013
3


void svd*nod 2c+ 99parcurgere in inordine
/if*c+
/svd*c'.st+1
cout--c'.nr0o--6 61
svd*c'.dr+1
3
3

int cautare*nod 2c,int (+
/if*c+
if*c'.nr0o55(+
return 11
else
if*c'.nr0o-(+
cautare*c'.dr,(+1
else
cautare*c'.st,(+1
else
return 01
3
void main*+
/99v501
cout--6nr de noduri 61
cin..n1
for*int i511i-5n1i::+
/cout--6valoarea de inserat 61
cin..(1
inserare*v,(+13

cout--endl--6arborele are urmatoarele noduri 6--endl1
svd*v+1
cout--endl--6valoarea de cautat 61
cin..(1
if*cautare*v,(++
cout--6s'a gasit;61
else
cout--6nu s'a gasit;61
getch*+1

3

You might also like