Sunteți pe pagina 1din 19

12.

ARBORI BINARI I ARBORI DE CUTARE


12.1 Structura de date de tip arborescent
Construirea unei structurii de date de tip arborescent pornete de la
problema pe care o avem de rezolvat.
Pentru gsirea soluiei ecuaiei f ( x ) 0 pentru x [ a, b ] se efectueaz
cu metode de calcul numeric, dintre care cea mai simpl este aceea a
njumtirii intervalului.
Se calculeaz:

c(a b)/ 2

(12.1)

f ( a )*f ( c ) 0

(12.2)

Dac:

nseamn c rdcina x [ a, c ) , n caz contrar x (c, b ] .


Noul subinterval este i el divizat. Astfel, avem imaginea unei
modaliti de lucru ierarhizat pe attea niveluri cte sunt necesare obinerii
unei precizii pentru soluia ecuaiei f ( x ) 0 . Se asociaz acestor niveluri
reprezentarea grafic din figura 12.1.
[ a, b ]

[a ,

a+b

a+b

[a ,

3a + b
4

,b]

3a + b
4

a+b

a+b

a + 3b

a + 3b

,b]

Figura 12.1 Reprezentarea grafic asociat divizrii intervalelor


Pentru evaluarea expresiei aritmetice:

(a b c d ) ( x y )
cd

(12.3)

prin modul de efectuare a calculelor conduce la reprezentarea din figura


12.2.

*
e

/
*
c

+
x

+
a

Figura 12.2 Reprezentarea arborescent asociat evalurii expresiei


Pentru regsirea crilor ntr-o bibliotec, n fiierul tematic cotele se
structureaz pe nivele, ca n exemplul din figura 12.3.

biblioteca
1xxxxx : 7xxxxx

matematica
1xxxxx : 23xxxx
algebra
1xxxxx /
197xxx

geometrie
198xxx /
23xxxx

calculatoare
24xxxx : 51xxxx
hardware
24xxxx /
419xxx

software
420xxx /
51xxxx

economie
52xxxx : 7xxxxx
teorie
52xxxx /
680xxx

software
681xxx /
7xxxxx

Figura 12.3 Structura asociat fiierului de cote ale crilor


Reprezentarea n memorie a informaiilor care au multiple legturi
ntre ele, trebuie s fie astfel fcut, nct s poat realiza parcurgerea
complet a zonelor sau localizarea unui element din structur.
Se observ c n arborescen exist un nod numit rdcin sau
printe. Acesta are descendeni. Fiecare descendent poate fi la rndul su
printe i n acest caz are descendeni.
Arborele binar este caracterizat prin aceea c, orice nod al su are un
singur printe i maxim doi descendeni. Fiecare nod este reprezentat prin
trei informaii i anume:
Z
informaia util care face obiectul prelucrrii, ea descriind
elementul sau fenomenul asociat nodului;
informaia care localizeaz nodul printe;


informaia (informaiile) care localizeaz nodul (nodurile)
descendent (descendente).

Alocarea dinamic determin ca i s fie variabile aleatoare, ale


cror legi de repartiie sunt necunoscute. Valorile lor sunt stocate n zona de
memorie, formnd mpreun cu variabila Z structura de date asociat unui
nod, structur ce corespunde tripletului (Zj, j, j) asociat nodului j dintr-un
graf de form arborescent binar.
Volumul informaiilor destinate localizrii nodurilor, depinde de
obiectivele urmrite i de rapiditatea cu care se dorete localizarea unui
anumit nod. Cu ct diversitatea prelucrrilor este mai mare, cu att se
impune stocarea mai multor informaii de localizare.

Zj-1

j-1

Zj

Zj + 1

j+1

j-1

adr (Z j - 1 )

adr (Z j 1 )

j-1

Figura 12.4 Modelul grafic asociat tripletului (Zj,

j,

j)

Dac tripletul (Zj, j, j) ce corespunde modelului grafic din figura


12.4 permite baleierea de sus n jos, sau de jos n sus, pe o ramur a
arborelui. Pentru a parcurge pe orizontal arborele, este necesar att o
informaie suplimentar de localizare j , care corespunde nodului vecin din
dreapta de pe acelai nivel, ct i informaia

pentru localizarea nodului

din stnga de pe acelai nivel.


Un astfel de arbore se descrie prin:

( Z j , j, j, j , j )

(12.4)

Descrierea complet a unui arbore, presupune crearea mulimii


tripletelor sau cvintuplelor asociate nodurilor.
De exemplu, arborescenei asociate evalurii expresiei:
e = a + b + c;

(12.5)

prezentate n figura 12.5 i corespunde alocarea i iniializarea zonelor de


memorie din figura 12.6.

=
+
e
c

+
a

Figura 12.5 Structura arborescent asociat evalurii expresiei e

null

null

null

null

null

Figura 12.6 Alocarea i iniializarea zonelor de memorie


pentru implementarea structurii arborescente
Acestor reprezentri grafice, trebuie s le corespund algoritmi
pentru ncrcarea adreselor, ntruct a construi forma liniarizat a structurii
arborescente, nseamn n primul rnd, a aloca zone de memorie i n al
doilea rnd, a iniializa membrii structurii cu adrese care s permit
reconstruirea corect a nlnuirii.
Se observ c pentru iniializarea corect, este necesar existena la
un moment dat a pointerilor spre trei zone de memorie alocate dinamic i
anume:
pp
pointerul spre zona alocat nodului precedent (printe);
pc
pointerul spre zona asociat nodului curent;
pd
pointerul spre zona asociat primului descendent;
Construirea nodului ( Zj, j, j ) revine la efectuarea iniializrilor:

ref (pc) . Z j valoare_citita;


ref (pc) .

pp;

ref (pc) .

pd;

pp pc;
pc pd;

(12.6)

new (pd);
Dup efectuare secvenei se face trecerea la pasul urmtor. Folosind
simbolurile, orice structur arborescent se reprezint prin:
N mulimea nodurilor
A mulimea arcelor
De exemplu, arborescena dat pentru calculul expresiei 12.5 se
reprezint prin:
N={e,
i

, a, +, b, + , c }

(12.7)

A = { (a+) ,

(b+) ,

(c+) ,

(+, =) ,

(=, e) }

(12.8)

Se observ c pentru fiecare element al mulimii N, se aloc dinamic


zona de memorie care conine i informaiile j, j . La alocare este
posibil numai iniializarea zonei Zj.
Odat cu alocarea se iniializeaz i un vector de pointeri, cu adresele
corespunztoare zonelor de memorie puse n coresponden cu nodurile. n
continuare, prelund elementele mulimii A, are loc completarea cmpurilor
j i j . De exemplu, pentru arborele binar din figura 12.7 construirea se
efectueaz prin alocarea a 7 zone de memorie cu structura ( Z j , j,

pentru nodul din mulimea N { A, B, C, D, E, F, G } i se iniializeaz vectorul


de pointeri pp[i] dup cum urmeaz:

pp [1] adr (ZA)


pp [2] adr (ZB)
pp [3] adr (ZC)
pp [4]
pp [5]
pp [6]
pp [7]

adr (ZD)
adr (ZE)
adr (ZF)
adr (ZG)

(12.9)

Baleierea mulimii:

A { (AB), (AC), (BD), (BE), (CF), (CG) }

(12.10)

revine la efectuarea atribuirilor:

ref
ref
ref
ref
ref
ref
ref
ref
ref
ref

(pp[1] ).
(pp[2] ).
(pp[3] ).
(pp[4] ).
(pp[2] ).
(pp[4] ).
(pp[3] ).
(pp[6] ).
(pp[7] ).
(pp[1] ).

pp[2]
pp[4]
pp[6]
ref (pp[5] ). ref (pp[6] ). ref (pp[7] ). NULL (12.11)
pp[1]
pp[2]
pp[1]
pp[3]
pp[3]
ref (pp[1] ). NULL

A
B
D

Figura 12.7 Arbore binar


Pentru arborii binari echilibrai, exist posibilitatea ca dup alocarea
memoriei s se descrie elementele mulimii A, dup care iniializrile
cmpurilor j i j s se fac prin apelarea unei funcii. Problematica devine
mai simpl, dac arborele binar este complet, adic are n niveluri la baz
2(n-1) elemente descendente, fr a fi printe, noduri terminale.
n programele C/C++, pentru implementarea structurilor de date
necontigue, arborele binar se definete prin urmtorul tip de baz derivat.
struct arbore
{
int valoare;
arbore *precedent;
arbore *urmator;
};
class arb
{
arbore *rad;
};
struct arbore_oarecare
{
int valoare;
arbore_oarecare **fii; //lista fiilor unui nod
int nrfii;
//nr de fii ai nodului
};
class arb_oarecare
{
arbore_oarecare *rad;
};
struct arbore_binar
{
int valoare;
arbore_binar *stanga;
arbore_binar *dreapta;
};
class arb_binar
{
arbore_binar *rad;
};

12.2 Transformarea arborilor oarecare n arbori binari


Aplicaiile concrete, asociaz unor obiecte, subansamble sau procese,
structuri de tip arborescent care nu sunt binare, astfel nct se contureaz
ideea ca arborii binar sunt cazuri particulare de arbori, mai ales prin
frecvena cu care sunt identificai n practic. Mecanismele de realizare i de
utilizare a arborilor binar i fac practice, dei n realitate au frecvena de
apariie sczut.
Apare problema transformrii unei structuri arborescente oarecare
ntr-o structur arborescent binar, problema rezolvabil prin introducerea
de noduri fictive. Astfel, fiind dat arborescena din figura 12.8,
transformarea ei n structur arborescent binar, revine la introducerea
nodurilor fictive, x, y, u, v, w, rezultnd arborele din figura 12.9.

Figura 12.8 Structur arborescent oarecare

k
Figura 12.9 Structur arborescent cu noduri fictive

Arborele oarecare, are un numr de noduri mai mic dect arborele


binar, nodurilor fictive corespunzndu-le zone de memorie structurate
(NULL, j, j).
Alocarea dinamic presupune, ca n zona [Di, Df] prin dealocare s
apar goluri, adic zone libere ce sunt realocate altor variabile. Este
necesar o gestionare a acestor zone i periodic trebuie s se efectueze o
realocare prin reorganizare, aa fel nct s dispar golurile rezultate n
procesul de alocare-dealocare multipl. De exemplu, pentru un program P,
este necesar alocarea a 3 zone de memorie de 1500, 2000, 4000 baii, ce
corespund arborilor binar A, B i C.
Alocarea este efectuat iniializnd variabilele pointer pA, pB i pC prin
apelul succesiv al funciei alocare( ), (pas 1).
Dealocarea dup un timp a arborelui binar B, determin apariia unui
gol ntre zonele ocupate de variabilele A i C, (pas 2).
Alocarea unei zone de memorie pentru arborii binari D (3000 baii) i
E (1000 baii), revin la a dispune pe D n continuarea lui C i a intercala
arborele E ntre A i C, n golul rezultat din dealocarea lui E, rmnnd
ntre E i C un gol de 300 baii, (pas 3).
Dac se pstreaz informaiile privind modul de iniializare a
variabilelor pointer care stocheaz adresele nodurilor rdcin a arborilor A,
E, C i D, este posibil glisarea informaiilor n aa fel nct s dispar
golul dintre E i C. Nu s-a luat n considerare nsi necontiguitatea din
interiorul fiecrui arbore.
n practic, apare problema optimizrii dispunerii variabilelor
dinamice, dar i cea a alegerii momentului n care dispersia elementelor
atinge un astfel de nivel, nct zona pentru alocare dinamic este practic
inutilizabil i trebuie reorganizat.

12.3 Arbori binari de cutare


Un arbore binar de cutare este un arbore binar care are
proprietatea c prin parcurgerea n inordine a nodurilor se obine o secven
monoton cresctoare a cheilor (cheia este un cmp ce servete la
identificarea nodurilor n cadrul arborelui). Cmpul cheie este singurul care
prezint interes din punct de vedere al operaiilor care se pot efectua
asupra arborilor de cutare.
Principala utilizare a arborilor binari de cutare este regsirea rapid
a unor informaii memorate n cheile nodurilor. Pentru orice nod al unui
arbore de cutare, cheia acestuia are o valoare mai mare dect cheile
tuturor nodurilor din subarborele stng i mai mic dect cheile nodurilor ce
compun subarborele drept.

20

10

25

22

26

Figura 12.10 Arbore binar de cutare


Structura de date folosit pentru descrierea unui nod al unui arbore
binar de cutare va fi urmtoarea:
struct arbore_binar
{
int cheie;
arbore_binar *stanga;
arbore_binar *dreapta;
};
class arb_binar
{
arbore_binar *rad;
};

Rdcina arborelui binar de cutare va fi definit n felul urmtor:


arb *Radacina = NULL;

(12.12)

Se observ ca fiecare nod este compus din cheia asociat i din


informaiile de legtur care se refer eventualii fii.
Aa cum le spune i numele, arborii binari de cutare sunt folosii
pentru regsirea rapid a informaiilor memorate n cheile nodurilor. De
aceea cutarea unui nod cu o anumit valoarea a cheii este o operaie
deosebit de important.
Cutarea ncepe cu nodul rdcin al arborelui prin compararea
valorii cheii cutate cu valoarea cheii nodului curent. Dac cele dou valori
coincide, cutarea s-a ncheiat cu succes. Dac informaia cutat este mai
mic dect cheia nodului, cutarea se continu n subarborele stng. Dac
cheia cutat este mai mare dect valoarea cheii nodului, cutarea se reia
pentru subarborele drept.
Crearea unui arbore binar de cutare presupune adugarea cte unui
nod la un arbore iniial vid. Dup inserarea unui nod, arborele trebuie s
rmn n continuare ordonat. Din acest motiv, pentru adugarea unui nod
se parcurge arborele ncepnd cu rdcina i continund cu subarborele
stng sau drept n funcie de relaia de ordine dintre cheia nodului i cheia
de inserat. Astfel, dac cheia de inserat este mai mica dect cheia nodului,
urmtorul nod vizitat va fi rdcina subarborelui stng. n mod similar, dac
cheia de inserat este mai mare dect cheia nodului, traversarea se va
continua cu nodul rdcin al subarborelui drept. Aceast modalitate de
traversare se continu pn n momentul n care se ajunge la un nod fr

descendent. Acestui nod i va fi adugat un nod fiu cu valoarea dorit a


cheii.
Aplicaiile care utilizeaz arbori binari de cutare pot permite sau pot
interzice, n funcie de filozofia proprie, inserarea n cadrul arborelui a unei
chei care exist deja.
Inserarea n cadrul arborelui anterior a unui nou nod cu valoarea cheii
egal cu 12 conduce ctre urmtorul arbore, figura 12.11.
20

10

25

12

22

26

Figura 12.11 Arbore binar de cutare dup inserarea unui nod


Maniera uzual de inserare a unui nod ntr-un arbore binar de cutare
este cea recursiv.
n practic, de cele mai multe ori cutarea i inserarea se folosesc
mpreun. Astfel, n cazul n care cutarea unei chei s-a efectuat fr
succes, aceasta este adugat la arborele binar de cutare.
O alt operaie care se poate efectua asupra unui arbore binar de
cutare este tergerea unui nod care are o anumit valoare a cheii. Dac
valoarea cheii este gsit n cadrul arborelui, nodul corespunztor este
ters. Arborele trebuie s rmn arbore de cutare i dup tergerea
nodului.
n ceea ce privete nodul care va fi ters, acesta se va ncadra ntruna din variantele urmtoare:
a) nodul nu are subarbori (fii);
b) nodul are doar subarbore stng;
c) nodul are doar subarbore drept;
d) nodul are att subarbore stng ct i subarbore drept.
n cazul n care nodul nu are nici subarbore stng dar nici subarbore
drept (varianta a) este necesar doar tergerea nodului. Nu sunt necesare
alte operaiuni de actualizare a arborelui.

Figura 12.12 Arbore binar de cutare nainte de tergerea unui nod

n figura 12.12 este prezentat un fragment al unui arbore binar de


cutare din care dorim s tergem nodul din dreapta, iar n figura 12.13 se
prezint acelai fragment de arbore dar dup tergerea nodului dorit.

Figura 12.13 Arbore binar de cutare dup tergerea unui nod


Pentru cazurile b i c (nodul pe e dorim s-l tergem are subarbore
stng sau drept), pe lng tergerea nodului este necesar i actualizarea
legturilor dintre nodurile arborelui. n figurile 12.14 i 12.16 se prezint
cte un fragment dintr-un arbore binar de cutare din care dorim s
tergem nodul evideniat. n figura 12.14, nodul pe care dorim s-l tergem
are numai subarbore stng iar cel din figura 12.16 are doar subarbore
drept. n figurile 12.15 i 12.17 se pot observa efectele operaiei de
tergere.

Figura 12.14 Subarbore numai cu descendent stng

Figura 12.15 Subarbore dup efectuarea tergerii

Figura 12.16 Subarbore numai cu descendent drept

Figura 12.17 Subarbore dup efectuarea tergerii


Pentru aceste prime trei cazuri, actualizarea arborelui se face n felul
urmtor: fiul nodului care va fi ters, dac exist, va deveni fiul tatlui
acestuia. Actualizarea arborelui este urmat de tergerea nodului din
memorie.
Cazul n care nodul ce se dorete a fi ters are att subarbore stng
ct i subarbore drept necesit o tratare special. Astfel, mai nti se
localizeaz fie cel mai din stnga fiu al subarborelui drept fie cel mai din
dreapta fiu al subarborelui drept. Cheile acestor noduri sunt valoarea
imediat urmtoare cheii nodului ce se dorete a fi ters i valoarea
precedent.
Dup suprimarea nodului dorit, arborele va trebui s rmn n
continuare arbore de cutare ceea ce nseamn c relaia de ordine dintre
nodurile arborelui va trebui s se pstreze. Pentru aceasta, unul din
nodurile prezentate anterior va trebui adus n locul nodului care se dorete
a fi ters dup care are loc tergerea efectiv a nodului dorit.
Determinarea celui mai din dreapta fiu al subarborelui stng se face
parcurgnd subarborelui stng prin vizitarea numai a fiilor din dreapta.
Primul nod care nu are subarbore drept este considerat ca fiind cel mai din
dreapta nod al subarborelui stng.
n figura 12.18 se prezint un fragment de arbore binar de cutare
din care dorim s suprimm nodul evideniat care are doi descendeni.
Presupunem ca nodul haurat este cel mai din dreapta fiu al subarborelui
stng. Acest nod va lua locul nodului care se va terge. n figura 12.19 este
reprezentat fragmentul de arbore dup efectuarea operaiei de tergere a
nodului dorit.

Figura 12.18 Subarbore cu doi descendeni

Figura 12.19 Subarbore dup efectuarea tergerii

12.4 Aplicaii care utilizeaz structura de date de tip


arbore binar de cutare
Asupra arborilor binari de cutare pot fi efectuate o serie de operaii,
dintre care o parte sunt specifice tuturor structurilor de date compuse
(adugare element, tergere elemente) iar altele sunt specifice acestui tip
de structur de date. De asemenea se remarc operaii la nivel de element
(nod), precum i operaii care implic ntregul arbore.
Programul urmtor, exemplific o modalitate de creare a unui arbore
binar de cutare, stergere noduri, traversare, numarare noduri i de tiprire
a acestuia:
#include
#include
#include
#include
#include

<iostream.h>
<conio.h>
<stdio.h>
<malloc.h>
<string.h>

struct nod
{
int info;
nod *stg,*drt;
};
class arbbin
{
nod *rad;
int stergere(nod *&);
void stergere_nod(nod*&,int);
public:
arbbin()
{rad=NULL;};
~arbbin()
{rad=NULL;};
void traversare_srd(nod*);
void srd();
void traversare_rsd(nod *);
void rsd();
void traversare_sdr(nod *);
void sdr();
int sumaFrunze(nod*);
int sFrunza();
int numara(nod *);
int numara_nod();
void print(nod *);
void tiparire();
void salvare();
nod *inserare_nod(nod *,int );
void operator + (int);
void operator - (int);
arbbin &operator >(FILE *);
arbbin &operator <(FILE *);
void inserare_cuv(nod *& ,char*);
void insert(char *);
nod *operator [] (int);
};
nod *arbbin::inserare_nod(nod *rad,int k)
{
if (rad)
{
if (k<rad->info) rad->stg=inserare_nod(rad->stg,k);
else
if (k>rad->info) rad->drt=inserare_nod(rad->drt,k);
else printf("\nNodul exista in arbore!");
return rad;
}
else
{
nod *p=new nod;
p->stg=NULL;
p->drt=NULL;
p->info=k;
return p;
}
}
void arbbin::operator +(int k)
{

rad=inserare_nod(rad,k);
}
void arbbin::traversare_srd(nod *rad)
{
if (rad)
{
traversare_srd(rad->stg);
printf(" %d",rad->info);
traversare_srd(rad->drt);
}
}
void arbbin::srd()
{
nod *p;
p=rad;
traversare_srd(p);
}
void arbbin::traversare_rsd(nod *rad)
{
if (rad)
{
printf(" %d",rad->info);
traversare_rsd(rad->stg);
traversare_rsd(rad->drt);
}
}
void arbbin::rsd()
{
nod *p;
p=rad;
traversare_rsd(p);
}
void arbbin::traversare_sdr(nod *rad)
{
if (rad)
{
traversare_sdr(rad->stg);
traversare_sdr(rad->drt);
printf(" %d",rad->info);
}
}
void arbbin::sdr()
{
nod *p;
p=rad;
traversare_sdr(p);
}
void arbbin::print(nod *rad)
{
if (rad)
{
printf("%d",rad->info);
if((rad->stg)||(rad->drt))
{

printf("(");
print(rad->stg);
printf(",");
print(rad->drt);
printf(")");
}
}
else
printf("-");
}
void arbbin::tiparire()
{
nod *p;
p=rad;
print(p);
}
int arbbin::sumaFrunze(nod *rad)
{
if (rad)
if(!rad->stg&&!rad->drt)
return rad->info;
else
return sumaFrunze(rad->stg)+sumaFrunze(rad->drt);
else
return 0;
}
int arbbin::sFrunza()
{
nod *p;
p=rad;
return sumaFrunze(p);
}
int arbbin::numara(nod *rad)
{
if (rad)
return 1+numara(rad->stg)+numara(rad->drt);
else return 0;
}
int arbbin::numara_nod()
{
nod *p;
int nr;
p=rad;
nr=numara(p);
return nr;
}
void arbbin::stergere_nod(nod *&rad,int inf)
{
nod *aux;
if (!rad) printf("\nNodul nu exista in arbore!");
else
if (inf<rad->info) stergere_nod(rad->stg,inf);
else
if (inf>rad->info) stergere_nod(rad->drt,inf);
else

{
aux=rad;
if (!aux->stg)
{
rad=aux->stg;
delete(aux);
}
else
if(!aux->drt)
{
rad=aux->drt;
delete(aux);
}
else
rad->info=stergere(rad->stg);
}
}
int arbbin::stergere(nod *&p)
{
if (p->stg)
return stergere(p->stg);
else
{
nod *q=p;
int inf=q->info;
p=p->stg;
delete(q);
return inf;
}
}
void arbbin::operator -(int inform)
{
nod *nou;
nou=rad;
stergere_nod(nou,inform);
}
nod *arbbin::operator [] (int inf)
{
nod *aux;
aux=rad;
while(aux&&aux->info!=inf)
{
if (inf<aux->info)
aux=aux->stg;
else
if (inf>aux->info)
aux=aux->drt;
};
if (aux&&aux->info==inf)
cout<<"\nNodul cautat exista in arbore!";
else
cout<<"\nNodul cautat nu exista in arbore!";
return aux;
}
void meniu()
{

cout<<"\n
cout<<"\n
cout<<"\n
cout<<"\n
cout<<"\n
cout<<"\n
cout<<"\n
cout<<"\n

1.ADAUGARE NOD DE LA TASTATURA";


2.STERGERE NOD DE LA TASTATURA";
3.CAUTARE NOD IN ARBORE";
4.TRAVERSARI ARBORE-SRD(),RSD(),SDR()";
5.SUMA INFORMATIILOR DIN FRUNZE ";
6.NUMARUL NODURILOR DIN ARBORE";
7.AFISARE ARBORE";
0.TERMINARE";

}
void main()
{
arbbin arb;
int informatie;
char optiune;
arb+10;arb+7;arb+15;arb+9;arb+3;arb+8;arb+25;
meniu();
optiune='1';
while (optiune!='0')
{
cout<<"\nOptiunea dorita este:";
cin>>optiune;
if(((optiune>='0')&&(optiune<='9'))||(optiune=='n'))
{
switch(optiune)
{
case '1':
char op;
cout<<"\nNoul nod de introdus:";
cin>>informatie;
arb+informatie;
cout<<"\nMai doriti adaugarea unui alt nod(d/n)?";
cin>>op;
while (op=='d')
{
cout<<"\nNoul nod de introdus:";
cin>>informatie;
arb+informatie;
cout<<"\nSe va mai adauga alt nod(d/n)?";
cin>>op;
}
getch();
meniu();
break;
case '2':
cout<<"\nNodul care se va sterge:";
cin>>informatie;
arb-informatie;
getch();
meniu();
break;
case '3':
int elem;
cout<<"\nNodul care va fi cautat:";
cin>>elem;
arb[elem];
getch();
meniu();
break;
case '4':
printf("\nArborele traversat in SRD:");

arb.srd();
printf("\nArborele traversat in RSD:");
arb.rsd();
printf("\nArborele traversat in SDR:");
arb.sdr();
getch();
meniu();
break;
case '5':
printf("\nSuma inf frunze:%d", arb.sFrunza());
getch();
meniu();
break;
case '6':
cout<<"\nNumarul de noduri:"<<arb.numara_nod();
getch();
meniu();
break;
case '7':
printf("\nArborele tiparit in RSD:");
arb.tiparire();
getch();
meniu();
break;
case '0':
break;
}
}
else cout<<"\nOptiunea nu exista in meniu!";
}
}

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