Sunteți pe pagina 1din 38

Curs 5 coninut

arbori
arbori binari (ArbBin)
aplicaie: reprezentarea expresiilor
ca arbori

Structuri de date

2013 - 2014

Arbori
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

2013 - 2014

6
9

8
10
2

Arbori aplicaii
Arbori genealogici;
Colecii de cari n biblioteci;
Organizarea fiierelor;
Medii de programare.
Structuri de date

2013 - 2014

Arbori genealogici

Structuri de date

2013 - 2014

Arbori de decizie
5?
3?

7?

2?
1?

4?

=3?

6?

8?

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

=8?

=9?

=1? =2?
1

Structuri de date

2013 - 2014

Arbori sintactici

+
*

a
c

a
b

/
c

a
d

(a + c * b) - (a + c / d * a)
Structuri de date

2013 - 2014

Arbori ptratici
toat imaginea neagr:
toat imaginea alb:
altfel:

Structuri de date

2013 - 2014

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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

11

Arbori binari: exemplu


C

rdcin
fiu stng

fiu drept

G
A

K
B
H

Structuri de date

M
F

D
I

subarbore stng

2013 - 2014

12

Arbori binari: definiia recursiv:


arborele cu nici un nod (vid) este arbore binar
daca 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
2013 - 2014

13

Arbori binari: proprieti


Notaii

numrul de noduri
n e numrul de noduri externe
ni numrul de noduri interne
h nlimea

h +1 n 2

h +1

log 2 (n + 1) 1 h n 1
Structuri de date

2013 - 2014

1 ne 2 h
h

h ni 2 1
14

Arbori binari: proprieti


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

2
e
h +1
h +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

2013 - 2014

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

2013 - 2014

16

ArbBin: inserare
C

G
A

K
X

B
H

Structuri de date

M
F

D
I

2013 - 2014

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

2013 - 2014

18

ArbBin: eliminare
C

G
A

K
B

M
F

D
I

Structuri de date

2013 - 2014

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

2013 - 2014

20

ArbBin :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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

27

ArbBin: implementare cu structuri


nlnuite
reprezentarea obiectelor
C

G
A

K
B

M
F

D
I

H
Structuri de date

2013 - 2014

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

2013 - 2014

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

2013 - 2014

30

ArbBin: implementarea parcurgerii BFS


C

E
K

G
A

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

2013 - 2014

31

ArbBin: 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 (vstg NULL)
then insereaza(Coada, v->stg)
if (vdrp NULL)
then insereaza(Coada, v->drp)
elimina(Coada)
end

Structuri de date

2013 - 2014

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

2013 - 2014

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

2013 - 2014

B
4

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

2013 - 2014

35

Definiia expresiilor ntregi


<int> ::= ... 2 | -1 | 0 | 1 | 2 ...
<expr_int> ::= <int>
| <exp_int> <op_bin> <exp_int>
| (<exp_int>)
<op_bin> ::= + | | * | / | %
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

2013 - 2014

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

2013 - 2014

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

2013 - 2014

66
21
38

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