Sunteți pe pagina 1din 14

Structuri de date

CURS 10
1. Noiunea de arbore
Arborele ca structur de date a aprut ca o consecin a datelor inter-relaionate i organizate
ierarhic. O posibil problem care conduce n mod logic la un arbore este cea a arborelui
genealogic. Figura 1 arat o posibil organizare a descendenei genealogice:
De aici se poate edea -n mare- care sunt trsturile unui arbore.
DEFINIIE: Arborele este o mulime finit de unul sau mai multe noduri cu proprietile:
i! exist un nod special denumit rdcin ;
ii! nodurile rmase sunt partiionate n n 0 mulimi disjuncte T
1
,..,T
n
, fiecare din aceste
mulimi la rndul ei fiind un arbore. T
1
,..,T
n
sunt numii i subarbori ai rdcinii.
OBSERVAIE Din de"iniia recursi de mai sus se poate obsera c am introdus noiunea de
subarbore# str$ns legat de cea de arbore. De "apt# subarborele este un arbore n care rdcina este
la r$ndul ei "iul cuia# adic e%ist cel puin un nod deasupra rdcinii# numit printele ei.
Dup aceast de"iniie i din "igura 1 putem s eideniem c$tea noiuni str$ns legate de e%istena
unui arbore i anume:
a! nodul rdcin este nodul care nu este "iul nici unui nod&
b! "iecare alt nod din arbore este "iul unui singur nod# nod numit i printe& n Fig 1. nodul etichetat
'Dan( este nod rdcin cu "iii ')ihai(# (Flaia( i ')onica(. *entru ')ircea(# nodul +)ihai+
este nod printe&
c! dac e%ist
,
! n # ast"el nc$t oricare nod are cel puin n "ii# atunci arborele se numete arbore
n-ar& pentru n - 1# obinem o list simplu nlnuit# pentru n-. obinem arbore binar# pentru
1
Dan
Mihai
Fa!ia Moni"a
#udor Maria
Mir"e
a
Eena Iuia
Vi"$oria Vaeri
a
rdcin/root!
Figura 1. Arborele
genealogic
Structuri de date
n-0 obinem arbore ternar# etc. /ezi "igura .!& numrul de "ii ai unui nod se numete gradul
nodului /engl. de"ree!.
d! "iecare arbore este compus din noduri /engl. #ertex! i arce# care unesc nodurile ntre ele& la
r$ndul lor# nodurile se mpart n:
- noduri neterminale /interioare! care au cel puin un "iu&
- noduri terminale /"runze! care nu au nici un "iu.
1n "igura ..a nodurile A#2# i 3 sunt neterminale iar 4 este o "runz.
e! arborele se poate structura pe niele# dup cum urmeaz:
- rdcina se a"l pe primul niel&
- dac un nod se a"l pe nielul i# atunci "iii si se a"l pe nielul i 5 1 .
Ast"el# n "igura ..c nodul 4 se a"l pe nielul 1# nodurile D i A se a"l pe nielul .#
6#*#O#)#7 pe nielul 0# i 8#9#:#;#6#< se a"l pe nielul =.
"! nodurile "ii ale aceluiai nod se numesc noduri gemene /engl. siblin"s!& de e%emplu n "igura ..b
nodurile > i 0 sunt gemene deoarece sunt "iii nodului =.
;n alt mod de reprezentare a unui arbore este cel "olosind liste. Ast"el# arborele din "igura ..c poate
"i reprezentat ast"el:
%C%D%S%#&%'&%(&&%)%U&&%O&&%A%M%*&%+&&%I&&&
?egula de construcie a listei este urmtoarea:
i! lista ' corespunztoare arborelui "ormat dintr-un singur nod A este ' - /A!&
ii! pentru arborele # cu rdcina a i subarborii 81#..#8n reprezentarea este:
'8 , /a '81 '8. - '8n!
unde '
8i
este reprezentarea arborelui #i.
6e obser c i aceast de"iniie este recursi# ca de alt"el i de"iniia arborelui.
O alt noiune legat de arbore / ezi :nuth!# este cea de pdure /engl. forest!.
DEFINIIE: Pdurea este o mulime n @ arbori disjunci.
.
A
B
E
C
noduri
ne$er.inae
/run01
a& Arbore unar %i2$1
2i.3u 4n1nui$1&
1
5 1
6
7
5
8 7 1 8
b& Arbore binar
C
D A
S ) O M I
# ' ( U * +
"& Arbore $ernar
Figura .. Di"erite tipuri de arbore
Structuri de date
7mplementarea arborelui sub "orma unei structuri de date depinde de tipul arborelui. Dac se tie
despre arbore c este n-ar# atunci un nod a conine c$mpul de in"ormaie /data! i n c$mpuri de
legtur spre cei +cel mult n+ "ii # legturi ce or "i puse pe A;99 dac nu e%ist "iul respecti:

Data Link1 Link2 ............ ............ Linkn
Arborele din Fig ..b a "olosi pentru "iecare nod o structur de "orma:
Data Left Right
iar reprezentarea lui a "i :
Figura 0. ?eprezentarea arborelui din "ig. ..b
6tructura n limbaBul C99 care implementeaz arborele anterior este:
1
2
3
4
5
6
7
8
9
template<class T>
class BTree:public virtual Container
{
protected:
T data;
BTree<T> *left;
BTree<T> *right;
..
};
Dac nu se tie de la nceput c arborele este n-ar# atunci arborele se codi"ic ast"el:
nodul conine data /in"ormaia! i o list nlnuit de pointeri spre "ii.
Da$a 'in:
... .
Da$a 'in:
*entru arborele A-ar structura de date C99 corespunztoare este:

2
3
4
5
6
7
8
9
!

""fi#ier$l nar%tree.h
&include 'error.h'
&include '(ontainer.h'
&include 'lin)edli#t.h'
template<class T>
class *ar%Tree:public virtual Container
{
protected:
T data;
+in)ed+i#t<*ar%Tree*> li#t;
0
1
5 1
6
7
5
8 7
1
8
Structuri de date
,
13
14
5
6
7
8
9
,!
21
,,
23
,-
,5
26
,7
28
,9
30
3
3,
33
3-
35
36
37
38
39
40
-
42
-3
--
-5
-6
47
48
49
5!
5
52
53
5-
55
56
57
58
59
6!
61
6,
63
6-
65
66
67
68
69
7!
public:
*ar%Tree.T const/ t0:data.t01 li#t.0{}
2*ar%Tree.0
{
li#t.3$rge.0;
}
T/ get4ata.0const
{
return data;
}
unsigned int get*$56$7Tree.0 const
{
unsigned int n$56$7Tree8!;
+i#t9le5ent<*ar%Tree*> *:tr8li#t.get;ead.0;
while.:tr<8!0
{
:tr8:tr=>get*e>t.0;
n$56$7Tree??;
}
return n$56$7Tree;
}
*ar%Tree/ get6$7Tree.unsigned int n$56$7Tree0 const
{
unsigned int @8!;
+i#t9le5ent<*ar%Tree*> *:tr8li#t.get;ead.0;
while..@<n$56$7Tree0//.:tr<8!00
{
??@;
:tr8:tr=>get*e>t.0;
}
if.:tr88!0
throw 9rror.'Andi(e eronat'1 9BBCB0;
return *:tr=>get4ata.0;
}
void atta(h6$7Tree.*ar%Tree/ t0
{
li#t.addDtTail./t0;
(o$nt?8t.getCo$nt.0;
}
*ar%Tree/ deta(h6$7Tree.unsigned int n$56$7Tree0
{
*ar%Tree/ #$7Tree;
if.n$56$7Tree<get*$56$7Tree.00
{
#$7Tree8get6$7Tree.n$56$7Tree0;
(o$nt=8#$7Tree.getCo$nt.0;
li#t.9>tra(t./#$7Tree0;
}
else
throw 9rror.'Andi(e eronat'1 9BBCB0;
return #$7Tree;
}
};""#far#it$l (la#ei *ar%Tree
=
Structuri de date
8. Arboree binar
Arborele binar este un tip particular de arbore care apare "oarte des in algoritmic. 3l este
caracterizat de "aptul c "iecare nod are cel mult doi "ii. De"iniia ca structur de date a arborelui
este urmtoarea:
DEFINIIE: Arborele binar este o mulime finit de noduri care este sau #id, sau are un nod
numit rdcin, iar restul de noduri sunt "rupate n doi subarbori numii subarborele stn" i
subarborele drept $left %ri"&t'.
Din punct de edere a%iomatic# arborele binar poate "i de"init ast"el:
SD
B#REE
,CD; d; F; AD
cu:
D-C8# 28?33# 2OO93AAD
d-28?33
F conine urmtoarele "uncii:
CB9DT9.0 BTB99
A69E3TF.BTB990 BCC+9D*
BTB99.BTB991 T1 BTB990 BTB99
+9GT.BTB990 BTB99
4DTD.BTB990 T
BAH;T.BTB990 BTB99
A conine urmtoarele a%iome:
.0 l1 r BTB991 d T
A69E3TF.CB9DT9.00::8TBI9
A69E3TFBT.BTB99.l1d1r00::8GD+69
+9GT.BTB99.l1d1r00::8l
+9GT.CB9DT9.00::89BBCB
4DTD.BTB99.l1d1r00::8d
4DTD.CB9DT9.00::89BBCB
BAH;T.BTB99.l1d1r00::8r
BAH;T.CB9DT9.00::89BBCB
1n "igura = sunt artai c$ia arbori binari:
Figura =. Di"erii arbori binari
A
B
C
D
A
A
B
A
B
A
B
D E
C
a& b& "&
d&
e&
>
Structuri de date
1n "igura =.a se poate edea un caz particular de arbore binar i anume arborele 'des"cut( /engl.
s(e)ed! sau ntins# care are aceeai "uncionalitate ca o list simplu nlnuit.
;n alt tip de arbore binar este cel din "igura =.e# i anume un arbore binar 'echilibrat(# denumit aa
deoarece nodurile sale terminale /"runzele! se a"l pe ultimul sau ultimele dou nieluri.
OBSERVAIE: Arborii din "igurile >.=.b# >.=.c i >.=.d sunt# de asemenea# 'echilibrai(.
Arborii binari pot "i caracterizai de relaiile ntre nodurile terminale i neterminale dup cum
urmeaz:
'EMA 1. i' !umrul maxim de noduri de pe ni#elul i ntr*un arbore binar este
. 1 # .
1

i
i
ii' !umrul maxim de noduri ntr*un arbore binar de adncime k este
. 1 # 1 . (
(
DEMONS#RAIE:
i! se "ace prin inducie dup n i o lsm ca e%erciiu&
ii! "olosind i!# numrul ma%im de noduri ntr-un arbore binar de ad$ncime : a "i:
. . 1
1
1
i (
i
(

# E.e.d.
'EMA 8. +entru orice arbore binar ne#id T, dac notm cu n
0
numrul nodurilor terminale i cu n
2
numrul nodurilor de "rad ,, atunci n
0
- n
2
. 1.
DEMONS#RAIE: Fie n
1
- numrul nodurilor de grad 1. Atunci# dac n este numrul total de
noduri# cum arborele este binar# om aea n - n
0
5 n
1
5 n
8
. /1!.
Dac numrm arcele ntr-un arbore binar# edem c "iecare nod# cu e%cepia rdcinii# are un arc
ce intr n el# deci n - A 9 1# unde A este numrul total de arce din arbore /.!. Dar# "iecare arc
proine dintr-un nod ce poate aea gradul 1 sau .# deci A , n
1
9 8n
8
/0!.
Din %8& i %7& obinem c n , n
1
98n
8
9 1# care# combinat cu %1& ne d
n
0
9 n
1
9 n
8
, n
1
9 8n
8
9 1
de unde obinem
n
0
, n
8
9 1. E.e.d
'EMA 7. /ac T este un arbore k*ar cu n noduri fiecare de mrime fix, atunci n(k - 1) + 1 dintre
cmpurile de le"tur sunt nule.
DEMONS#RAIE: 4um "iecare c$mp de legtur nenul pointeaz spre un nod# iar e%act o legtur
pointeaz spre "iecare nod cu e%cepia rdcinii# atunci numrul de legturi nenule este de n < 1.
F
Structuri de date
Aumrul total al legturilor ntr-un arbore :-ar cu n noduri este n:. Ast"el# numrul legturilor nule
este:
n: < n 9 1 , n%: < 1& 9 1.
REMARC=: 9ema 0 implic "aptul c pentru un arbore :-ar cu n noduri /: .!# mai mult de
(
( 1

din legturi sunt nule# deci o mare cantitate de memorie rezerat memorrii legturilor nu este
"olosit. 4um
.
.
1 1
min

'

(
! (
(
(
i egalitatea se realizeaz pentru : - .# rezult c arborii binari au cel mai puin spaiu de legtur
nul dintre toi arborii :-ari# ceea ce Busti"ic larga lor utilizare.
*entru reprezentarea arborilor binari# ordinea legturilor spre "ii este important# moti pentru care
ei or purta nume distincte# i anume "iu t!ng i "iu dre"t al unui nod. 6tructura de date a arta
ast"el:

Da$a
'e/$ Ri>h$
iar n limbaBul C99 declaraia clasei a arta ast"el:

2
3
4
5
6
7
8
9
!

12
3
14
5
6
7
8
19
,!
21
22
23
24
25
26
27
28
29
30
31
""fiJier$l 7tree.h
&include '(ontainer.h'
template<class T>
class BTree:public virtual Container
{
protected:
T data;
BTree<T> *left;
BTree<T> *right;
public:
BTree.0:left.!01 right.!0{}
BTree.T const/ t0:data.t01 left.!01 right.!0
{
(o$nt??;
}
void 3$rge.0;
2BTree.0;
T/ get4ata.0const;
BTree* get+eft.0const;
BTree* getBight.0const;
void #et+eft.BTree* l0;
void #etBight.BTree* r0;
BTree.BTree<T>const /7t0;
void :reCrd.void .*f0.T/00;
void inCrd.void .*f0.T/00;
void :o#tCrd.void .*f0.T/00;
void 7readthGir#tTraKer#al.void .*f0.T/00;
int (o5:areTo.BTree<T>/ 7t0;
G
Structuri de date
32
33
3-
friend int (o5:areBTree.BTree<T>/ 7t1 BTree<T>/ 7t,0;
void B$ild9L.unsigned int nr*od$ri0;
};""#fMrJit$l (la#ei BTree
6pre deosebire de metoda clasic de declarare a structurii de date arbore binar# arianta propus de
noi nu "olosete un pointer nul pentru arbore id ci un obiect al clasei B#ree reprezint un arbore
id numai dac "uncia i2E.3$? returneaz aloarea $rue. Hom arta n cele ce urmeaz modul de
implementare a principalelor operaii pe arbori binari. Aa cum probabil se intuiete# modul
recurent n care arborii binari au "ost de"inii a conduce la utilizarea pe scar larg a "unciilor
recursie. *entru nceput# iat cum arat constructorii i destructorul clasei 28ree:
1
,
3
-
5
6
7
8
9
!

template<class T>
BTree::BTree.T const/ t0:data.t01 left.!01 right.!0
{
(o$nt??;
}
template<class T>
2BTree::BTree.0
{
3$rge.0;
}
*rin conenie# un arbore id a aea membrul count /motenit de la inter"aa Con$ainer! egal cu @
i implicit metoda i2E.3$? a returna $rue. Accesorii clasei B#ree i "unciile motenite i2E.3$?
i >e$Coun$ sunt de"inite n cele ce urmeaz:
1
2
3
4
5
6
7
8
9
10

,
13
14
5
16
7
8
19
20
,
22
,3
,-
25
26
,7
28
,9
emplate<class T>
T/ BTree::get4ata.0const
{
return data;
}
template<class T>
BTree* BTree::get+eft.0const
{
return left;
}
template<class T>
BTree* BTree::getBight.0const
{
return right;
}
template<class T>
unsigned int BTree::i#95:t%.0
{
return .(o$nt88!0;
}
template<class T>
unsigned int BTree::getCo$nt.0
{
return (o$nt;
}
I
Structuri de date
Dup cum se poate urmri i n inter"aa 28ree# am declarat i metodele modi"icator care seteaz
legturile st$ngi i drepte. 7mplementarea lor /care actualizeaz numrul de noduri! este urmtoarea:
1
2
3
4
5
6
7
8
9

1
2
1
3

-
1
5
1
6
1
7

9
,
!
,

template<class T>
void BTree::#et+eft.BTree const *Nleft0
{
if.i#95:t%.00
throw 9rror.'Dr7ore Kid'1 9BBCB0;
if.left<8!0//.left<8Nleft0
left=>3$rge.0;
left8Nleft;
(o$nt8?.leftOleft=>getCo$nt.0:!0?.rightOright=>getCo$nt.0:!0;
}
template<class T>
void BTree::#etBight.BTree* Nright0
{
if.i#95:t%.00
throw 9rror.'Dr7ore Kid'1 9BBCB0;
if.right<8!0//.right<8Nright0
right=>3$rge.0;
right8Nright;
(o$nt8?.leftOleft=>getCo$nt.0:!0?.rightOright=>getCo$nt.0:!0;
}
8.1. Con2$ru"ia unui arbore binar e"hiibra$ "u n noduri
4$nd se cunoate dinainte numrul n# tehnica utilizat "olosete urmtorul procedeu:
i! se pornete cu un arbore id&
ii! se citete in"ormaia pentru nodul rdcin# dup care se a apela recursi procedura
pentru determinarea subarborelui st$ng cu
1
1
1

.
1 n
ns
noduri # dup care se a apela
recursi procedura de construcie pentru subarborele drept cu n
d
, n < 1 < n
2
noduri&
iii! algoritmul se termin dac n , 0.
)etoda care construiete un ast"el de arbore cu rdcina n obiectul curent este BuidE@ i are
urmtorul cod:
1
2
3
4
5
6
template<class T>
void BTree::B$ild9L.unsigned int nr*od$ri0
{
unsigned int n#1 nd;
T Ndata;
if.nr*od$ri88!0
J
Structuri de date
7
8
9
!

,
3
14
5
16
7
8
19
,!
21
,,
,3
,-
3$rge.0;
(o$nt8nr*od$ri;
(o$t<<'4ata 8Pt';
(in>>Ndata;
data 8 Ndata;
n# 8 .nr*od$ri = 0",;
nd 8 nr*od$ri = n# Q ;
if.n#>!0
{
left8 new BTree;
left=>B$ild9L.n#0;
}
if.nd>!0
{
right8 new BTree;
right=>B$ild9L.nd0;
}
}
8.8. Co.3ararea a doi arbori binari
Dac in"ormaia coninut in nodul curent din primul arbore este mai mic dec$t cea din nodul
curent din cel de-al doilea arbore# atunci spunem c primul arbore este mai mic dec$t al doilea.
Dac nodul curent din primul arbore este nul# iar nodul curent din cel de-al doilea arbore este nenul#
atunci primul arbore este mai mic dec$t al doilea. 4riteriul se aplic recursi subarborilor st$ng i
drept. 6e a returna n "inal:
@ dac arborii sunt egali&
-1 dac primul arbore este mai mic dec$t al doilea&
1 n caz contrar.
1n acest scop om scrie o "uncie prieten "o.3areB#ree care compar doi arbori i apoi o om
apela dintr-o metod "o.3are#o a clasei B#ree:
1
2
3
-
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
,!
21
template<class T>
friend int (o5:areBTree.BTree<T> const/ 7t1 BTree<T> const/
7t,0
{
if.7t.i#95:t%.00
if.7t,.i#95:t%.00
return !; ""egale Kide
else
return =;
else
if.7t,.i#95:t%.00
return ;
else
if.7t.data<7t,.data0
return =;
else
if.7t.data>7t,.data0
return ;
else
{
int re#8(o5:areBTree.7t=>left1
1@
Structuri de date
,,
23
24
,5
26
27
,8
,9
3!
31
32
33
34
35
7t,=>left0;
if.re#88!0
return (o5:areBTree.
7t=>right1 7t,=>right0;
else
return re#;
}
}
template<class T>
int (o5:areTo.BTree<T> const / 7t0
{
return (o5:areBTree.*this1 7t0;
}
8.7. Co3ierea unui arbore binar
4opierea unui arbore binar n altul o om realiza cu aButorul unui constructor de copiere:
1
2
3
4
5
6
7
8
9
10
11
,
3
-
template<class T>
BTree::BTree.BTree<T>const / 7t0
{
if.7t.i#95:t%.00
::BTree.0;"" da(R e#te Kid at$n(i #e a:eleaSR
""(on#tr$(tor$l #i5:l$ al (la#ei BTree
else
{
data87t.data;
left8 7t.leftO new BTree.7t.left0:!;
right87t.rightO new BTree.7t.right0:!;
(o$nt8 7t.getCo$nt.0;
}
}
8.5. Di2$ru>erea unui arbore binar
Aa cum am amintit# obiectul curent e%ist deBa n memorie i nu se poate dealoca pe sine nsui. De
aceea# pentru distrugerea n ntregime a arborelui reprezentat de acest obiect se or distruge mai
nt$i "ii st$ng i drept dup care se dealoc cu dee$e memoria ocupat de aceti pointeri i n "inal
nodul curent este marcat ca "iind liber prin setarea ariabilei "oun$ pe @. )etoda care realizeaz
acest lucru este )ur>e:
1
2
3
4
5
6
7
8
9
!

12
3
-
5
6
template<class T>
void BTree::3$rge.0 ""($rRTR 5e5oria o($:atR de tot ar7orele
{
if.left<8!0
{
left=>3$rge.0;
delete left;
}
if.right<8!0
{
right=>3$rge.0;
delete right;
}
left8right8!;
(o$nt8!;
}
11
Structuri de date
8.6. #ra!er2area 4n adAn"i.e a arborior binari %en>. de"th&
Arborii binari pot "i traersai n ad$ncime i n lime. 9a r$ndul ei# traersarea n ad$ncime se
mparte n alte trei moduri# n "uncie de ordinea de izitare a nodurilor. Fie arborele din "igura >:


Figura >. ;n arbore binar la care se "ace traersarea n ad$ncime
3%ist trei moduri de traersare a arborilor n ad$ncime:
i! traersarea n preordine# de"init ast"el: mai nt$i se iziteaz nodul rdcin# apoi
subarborele st$ng i apoi subarborele drept.
*entru arborele din "igura ># traersarea n preordine a da urmtoarea ordine de
parcurgere:
A C B S U ' O # D M
1n general# parcurgerea n preordine poate "i schematizat n sintagma
Roo$ 'e/$ Ri>h$.
)etoda ce traerseaz arborele n preordine poate "i scris recursi ast"el:
1
2
3
-
5
6
7
8
9
template<class T>
void BTree:::reCrd.void .*f0.T/00
{
f.data0;
if.left<8!0
left=>:reCrd.f0;""a:el re($r#iK
if.right<8!0
right=>:reCrd.f0;""a:el re($r#iK
}
ii! traersarea n inordine const n traersarea subarborelui st$ng# a rdcinii i apoi a
subarborelui drept. Arborele din "igura > are urmtoarea reprezentare n ordine:
B C U S ' A O D # M %'e/$ Roo$ Ri>h$&
Funcia de traersare n ordine a arborelui este urmtoarea:
1
2
3
4
5
6
7
8
9
template<class T>
void BTree::inCrd.void .*f0.T/00
{
if.left<8!0
left=>inCrd.f0;""a:el re($r#iK
f.data0;
if.right<8!0
right=>inCrd.f0;""a:el re($r#iK
}
iii! traersarea n postordine const n traersareae subarborelui st$ng# asubarborelui drept
i apoi a rdcinii# dup schema:
1.
A
C
O
B
S
U '
#
D M
Structuri de date
'e/$ Ri>h$ Roo$
4a urmare a reprezentrii n postordine a arborelui din "igura > obinem secena:
B U ' S C O D M # A
Funcia de traersare n postordine a arborelui binar este urmtoarea:
1
2
3
4
5
6
7
8
9
template<class T>
void BTree:::o#tCrd.void .*f0.T/00
{
if.left<8!0
left=>:o#tCrd.f0;""a:el re($r#iK
if.right<8!0
right=>:o#tCrd.f0;""a:el re($r#iK
f.data0;
}
8.B. #ra!er2area arborior binari 4n 1i.e %en>. breadth&
8raersarea arborilor binari n lime este "oarte util n programe care trateaz arborescene mari
c$nd tim c soluia se a"l la ad$ncime mic "a de rdcin.
Aceast metod de traersare "olosete o coad iar algoritmul este urmtorul:
iniializeaz coada&
adaug nodul rdcin n coad&
c$t timp sunt elemente n coad e%ecut:
e%trage un element din coad&
scrie coninutul nodului&
introduce n coad "ii nodului respecti.
De e%emplu# arborele din "igura > are urmtoarea reprezentare n lime:
A C O B S # U ' D M
)etoda de traersare a arborilor n lime este urmtoarea:
1
2
3
-
5
6
7
8
9
!
11
,
3
-
5
6
7
8
template<class T>
void BTree::7readthGir#tTraKer#al.void .*f0.T/00
{
U$e$eD#Drra%<BTree*> L$e$e;
if.i#95:t%.00
return; ""ar7ore Kid
L$e$e.enU$e$e.this0;
while.<L$e$e.i#95:t%.00
{
BTree<T> *7t8L$e$e.deU$e$e.0;
if.<7t=>i#95:t%.00
{
f.7t=>get4ata.00;
L$e$e.enU$e$e.7t=>left0;
L$e$e.enU$e$e.7t=>right0;
}
}
}
8.C. Anai0a o3eraiior de $ra!er2are a arborior binari
10
Structuri de date
At$t traersarea n lime c$t i cea n ad$ncime presupune parcurgerea n timp constant a "iecrui
nod# deci ordinul "unciilor de parcurgere este n "iecare caz O/n!.
1=

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