Académique Documents
Professionnel Documents
Culture Documents
Arbori binari
SD 2016/2017
Structuri de date
Coninut
Arbori
Arbori binari (ArbBin)
Aplicaie: reprezentarea expresiilor
ca arbori
Structuri de date
x N , un singur drum
1
2
5
de la x la r ;
6
9
8
10
3
Arbori aplicaii
Arbori genealogici;
Colecii de cari n biblioteci;
Organizarea fiierelor;
Medii de programare.
Structuri de date
Arbori de decizie
5?
3?
7?
2?
1?
4?
=3?
6?
8?
=8?
=9?
=1? =2?
1
Structuri de date
9
5
Arbori sintactici
+
*
a
c
a
b
/
c
a
d
(a + c * b) - (a + c / d * a)
Structuri de date
Arbori ptratici
toat imaginea neagr:
toat imaginea alb:
altfel:
Structuri de date
A = sau
...
A1
A2
Ak
Arbori: terminologie
Rdcina: nodul fr printe
Nod intern: nod cu cel puin un
fiu
Nod extern (frunz): nod fr fii
Descendenii unui nod: fii,
nepoi, etc
Fraii unui nod: toate celelalte
noduri avnd acelai printe
subarbore
Arbori: terminologie
Adncimea unui nod x: numrul
de noduri de la rdcin la x
Structuri de date
3
10
ArbBin
obiecte : arbori binari.
un arbore binar este o colecie de noduri cu
proprietile:
1.orice nod are 0, 1 sau 2 succesori (fii, copii);
2.orice nod, exceptnd unul singur rdcina, are
un singur nod predecesor (tatl, printele);
3.rdcina nu are predecesori;
4.fiii sunt ordonai: fiul stng, fiul drept (daca un
nod are un singur fiu, trebuie menionat care);
5.nodurile fr fii formeaz frontiera arborelui.
Structuri de date
11
rdcin
fiu stng
fiu drept
G
A
K
B
H
Structuri de date
M
F
D
I
subarbore stng
12
t1
Structuri de date
t2
13
numrul de noduri
n e numrul de noduri externe
n i numrul de noduri interne
h nlimea
h +1 n 2
h +1
log 2 (n + 1) 1 h n 1
Structuri de date
1 ne 2 h
h ni 2 h 1
14
2
e
h +1
2h + 1 n 2
log 2 (n + 1) 1 h (n 1) / 2
h ni 2 h 1
ne = ni + 1
15
ArbBin:
operaii
insereaza()
intrare:
un arbore binar t
adresa unui nod cu cel mult un fiu (tatl
noului nod)
tipul fiului adugat (stnga, dreapta)
informaia e din noul nod
ieire
arborele la care s-a adugat un nod ce
memoreaz e; noul nod nu are fii
Structuri de date
16
ArbBin: inserare
C
G
A
K
X
B
H
Structuri de date
M
F
D
I
Y
17
ArbBin: eliminare
elimina()
intrare:
un arbore binar t
adresa unui nod fr fii i adresa
nodului-tat
ieire
arborele din care s-a eliminat nodul dat
(de pe frontier)
Structuri de date
18
ArbBin: eliminare
C
G
A
K
B
M
F
D
I
H
Structuri de date
19
ArbBin:parcurgere
preordine
parcurgePreordine()
intrare
un arbore binar t
o procedur viziteaza()
ieire
arborele binar t dar cu nodurile procesate cu
viziteaza()n ordinea:
rdcina (R)
subarborele stnga (S)
subarborele dreapta (D)
Structuri de date
20
G
A
K
B
M
F
D
I
H
C, E, K, B, H, A, L, F, G, M, D, I
Structuri de date
21
ArbBin:parcurgere
inordine
parcurgeInordine()
intrare
un arbore binar t
o procedur viziteaza()
ieire
arborele binar t dar cu nodurile procesate cu
viziteaza()n ordinea S R D
Structuri de date
22
G
A
K
B
M
F
D
I
H
K, H, B, E, L, A, F, C, M, G, I, D
Structuri de date
23
ArbBin:
parcurgere postordine
parcurgePostordine()
intrare
un arbore binar t
o procedur viziteaza()
ieire
arborele binar t dar cu nodurile procesate cu
viziteaza()n ordinea S D R
Structuri de date
24
G
A
K
B
M
F
D
I
H
H, B, K, L, F, A, E, M, I, D, G, C
Structuri de date
25
ieire
arborele binar t dar cu nodurile procesate cu
viziteaza() n ordinea BFS (pe niveluri)
Structuri de date
26
G
A
K
B
M
F
D
I
H
C, E, G, K, A, M, D, B, L, F, I, H
Structuri de date
27
G
A
K
B
M
F
D
I
H
Structuri de date
28
Structuri de date
29
ArbBin: parcurgePreordine()
procedure parcurgePreordine(v, viziteza)
begin
if (v == NULL)
then return
else viziteaza(v)
parcurgePreordine(v->stg, viziteaza)
parcurgePreordine(v->drp, viziteaza)
end
Structuri de date
30
E
K
G
A
Coada = ( C E G K A M D )
Structuri de date
31
Structuri de date
32
Reprezentarea relaiei
printe: tablou de prini
Avantaje:
Simplitate;
Acces uor de la un nod spre
rdcin;
Economie de memorie.
Inconveniente:
Acces dificil de la
rdcin spre noduri.
Structuri de date
A
D
B
4
-1
9
33
ArbBin:implementare cu tablouri
0
Structuri de date
B
4
9
A
10
10
12
w
11
12
13
14
34
35
este
(12-5)*2
sau
12-(5*2)?
reguli de asociere
15/4/2
15/4*2
Structuri de date
este
este
(15/4)/2
(15/4)*2
sau
sau
15/(4/2)?
15/(4*2)?
36
+
*
-12
17
43
5
34
Structuri de date
66
/
21
37
+
*
-12
17
43
5
/
34
Structuri de date
66
21
38