You are on page 1of 38

Arbori.

Arbori binari
SD 2016/2017

Structuri de date

Coninut
Arbori
Arbori binari (ArbBin)
Aplicaie: reprezentarea expresiilor
ca arbori

Structuri de date

Arbori [cu rdcin]


Model abstract pentru structuri ierarhice;
Un arbore este format din noduri legate
printr-o relaie printe-copil
A = (N, P)
N mulimea de noduri;
P relaie binar peste N,
(printele lui);
r N, nod rdcin.

x N , un singur drum

1
2
5

de la x la r ;

x N {r} , x are un singur printe.


Structuri de date

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?

=4? =5? =6? =7?

=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

Arbori: definiie recursiv


, arborele vid,
A=
( r , { A1 ,..., Ak }), r element, A1 ,..., Ak arbori
r

A = sau

...

A1

A2

Ak

Dac A este ordonat (planar), atunci


Structuri de date

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

Subarbore: arbore format dintrun nod i descendenii si


Structuri de date

Arbori: terminologie
Adncimea unui nod x: numrul
de noduri de la rdcin la x

dac x este radacina


0,
adncime( x) =
1 + adncime(printe( x)), n caz contrar
nlimea unui arbore:
adncimea maxim a nodurilor
arborelui.

nlimea unui nod x: distana


de la x la cel mai deprtat
descendent al su.

Structuri de date

3
10

Tipul de date abstract

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

Arbori binari: exemplu


C

rdcin
fiu stng

fiu drept

G
A

K
B
H
Structuri de date

M
F

D
I

subarbore stng
12

Arbori binari: definiia recursiv


Arborele cu nici un nod (vid) este arbore binar.
Dac v este un nod i t1, t2 sunt arbori binari
atunci arborele care are pe v ca rdcin, t1
subarbore stng al rdcinii i t2 subarbore
drept al rdcinii, este arbore binar.
v

t1
Structuri de date

t2
13

Arbori binari: proprieti


Notaii

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

Arbori binari: proprieti


Arbore propriu: fiecare nod intern are
exact doi fii
h
h
+
1

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

Arbore complet: arbore propriu n care


frunzele au aceeai adncime
nivelul i are 2i noduri
n = 2 h +1 1 = 2ne 1
Structuri de date

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

Parcurgere preordine - exemplu


C

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

Parcurgere inordine - exemplu


C

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

Parcurgere postordine - exemplu


C

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

ArbBin: parcurgere BFS


parcurgeBFS() - Breadth-first search
intrare
un arbore binar t
o procedur viziteaza()

ieire
arborele binar t dar cu nodurile procesate cu
viziteaza() n ordinea BFS (pe niveluri)

Structuri de date

26

Parcurgere BFS - exemplu


C

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

ArbBin: implementare cu structuri


nlnuite
reprezentarea obiectelor
C
E

G
A

K
B

M
F

D
I

H
Structuri de date

28

ArbBin: structura unui nod


un nod v (aflat la adresa v) este o
structur cu trei cmpuri:
v->inf /*informaia memorata n nod*/
v->stg /*adresa fiului stnga*/
v->drp /*adresa fiului dreapta*/

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

Implementarea parcurgerii BFS


C

E
K

G
A

Coada = ( C E G K A M D )
Structuri de date

31

Implementarea parcurgerii BFS


procedure parcurgeBFS(t, viziteza)
begin
if (t == NULL)
then return
else
Coada coadaVida()
insereaza(Coada, t)
while (not esteVida(Coada))
citeste(Coada, v)
viziteaza(v)
if (v->stg != NULL)
then insereaza(Coada, v->stg)
if (v->drp != NULL)
then insereaza(Coada, v->drp)
elimina(Coada)
end

Structuri de date

32

ArbBin: implementarea cu liste


0

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

Nodurile sunt memorate ntr-un


tablou.
1

Indexul unui nod este


index(rdcin) = 0
index(x) = 2*index(printe(x))+1,
dac x este fiu stng
index(x) = 2*index(printe(x))+2,
dac x este fiu drept

Structuri de date

B
4

9
A

10

10

12

w
11

12

13

14
34

Aplicaie: expresii ntregi


Expresii ntregi
definiie;
exemple.

Reprezentarea expresiilor ca arbori:


similariti ntre cele dou definiii;
arborele asociat unei expresii;
notaiile prefixate, infixate i postfixate
i parcurgeri ale arborilor.
Structuri de date

35

Definiia expresiilor ntregi


<int> ::= ... 2 | -1 | 0 | 1 | 2 ...
<op_bin> ::= + | | * | / | %
<expr_int> ::= <int>
| <exp_int> <op_bin> <exp_int>
| (<exp_int>)
reguli de preceden
12-5*2

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

Expresiile reprezentate ca arbori


-12 + 17 * 5 (43 + 34 / 21 * 66)

+
*

-12
17

43
5
34

Structuri de date

66

/
21

37

Notaiile postfixate i prefixate


notaia postfixat se obine prin parcurge postordine
-12, 17, 5, *, +, 43, 34, 21, /, 66, *, +, -

notaia prefixata se obine prin parcurge preordine


-, +, -12, *, 17, 5, +, 43, *, /, 34, 21, 66

+
*

-12
17

43
5

/
34

Structuri de date

66
21
38