Documente Academic
Documente Profesional
Documente Cultură
Aplicaii
Arbori binari
Definiie. Un arbore binar este un arbore orientat cu
proprietatea c pentru orice vrf v, od(v)2. Dac od(v)=2,
cei doi descendeni snt desemnai ca descendent stng (fiu
stnga) respectiv descendent drept (fiu dreapta). Pentru
vrfurile cu od(v)=1, unicul descendent este specificat fie ca
fiu stnga, fie ca fiu dreapta
Definiie. Se numete arbore strict binar un arbore binar cu
poprietatea c pentru orice vrf v, od(v)1.
Definiie. Se numete nod terminal (sau frunz) orice vrf v
al arborelui cu od(v)=0. n caz contrar nodul v este
neterminal.
Pe niveluri
n adncime
A-Preordine
A-Postordine
Preordine
Postordine
Inordine
void inordine(TNOD*
r)
void preordine(TNOD*
r)
void postordine(TNOD*
r)
{ if(r!=NULL) { if(r!=NULL)
{ if(r!=NULL)
{ inordine(r->st);
{ //prelucrare
r->info
{ postordine(r->st);
//prelucrare r->info
preordine(r->st);
postordine(r->dr);
inordine(r->dr);
preordine(r->dr);
//prelucrare r->info
}
}
}
}
}
}
13
4
2
1
8
5
12
9
11
15
14
16
13
4
2
1
8
5
12
9
11
15
12,5
14
16
13
4
2
1
8
5
12
9
15
11
14
16
7,2
7,1
7,3
10
5
12
4
2
7,2
3
11
7,1
9
7,3
15
14
16
Arbori de structur
Arbore de structur: arbore strict binar folosit pentru a
reprezenta expresiile aritmetice care conin numai operatori
binari. Fiecare nod conine ca informaie util:
un operand, dac este nod frunz
un operator, dac nu e nod frunz
Arborele se construiete acordnd prioriti operanzilor i
operatorilor.
Parcurgerea arborelui n preordine => forma polonez
direct a expresiei
Parcurgere arborelui n inordine => refacerea expresiei (cu
sau fr paranteze).
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
-
Construire arbore:
1. Calculare prioriti pentru operanzi i operatori
2. Construire propriu-zis a arborelui
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
1. Calculare prioriti pentru operanzi i operatori
Elemente expr. =(
Prioriti
a,
*,
b,
+,
c,
-,
d,
+,
e,
/,
f,
+,
g)
=(maxint,10,maxint,11,maxint,1,maxint,11,maxint,10,maxint,11,maxint)
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
Elemente expr. =(
Prioriti
a,
*,
b,
+,
c,
-,
d,
+,
e,
/,
f,
+,
g)
=(maxint,10,maxint,11,maxint,1,maxint,11,maxint,10,maxint,11,maxint)
dac expresia curent este vid, subarborele curent este vid (nil)
2.
3.
4.
fiul stng este subarborele obinut prin reprezentarea subexpresiei din stnga
elementului curent
5.
fiul drept este subarborele obinut prin reprezentarea subexpresiei din dreapta
elementului curent
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
--, d, +, e, /, f, +, g)
=(maxint,10,maxint,11,maxint,1,maxint,11,maxint,10,maxint,11,maxint)
1
Elemente expr. =(
Prioriti
a,
*,
b,
+,
c,
a*(b+c)
a
a
*
b
+
c
(maxint, 10, maxint, 11, maxint)
(d+e)/(f+g)
(d+e)/(f+g)
a
(maxint)
b+c
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
Elemente expr. =(
Prioriti
a,
*,
b,
+,
c,
-,
d,
+,
e,
*
()
()
()
+,
g)
(d+e)/(f+g)
b+c
()
f,
=(maxint,10,maxint,11,maxint,1,maxint,11,maxint,10,maxint,11,maxint)
/,
b
+
c
(maxint, 11, maxint)
(d+e)/(f+g)
+
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
Elemente expr. =(
Prioriti
a,
*,
b,
+,
c,
-,
d,
+,
e,
+,
g)
(d+e)/(f+g)
+
f,
=(maxint,10,maxint,11,maxint,1,maxint,11,maxint,10,maxint,11,maxint)
/,
a
c
d
+
e
/
f +
g
(maxint,11,maxint,10,maxint,11,maxint)
/
+
d+e
c
f+g
Arbori de structur
Parcurgerea arborelui n preordine => forma polonez direct a
expresiei:
-*a+bc/+de+fg
a*b+cd+e/f+g
((a)*((b)+(c)))-(((d)+(e))/((f)+(g)))
Arbori de structur
Evaluare expresie: prin parcurgere n postordine.
Prelucrarea fiecrui nod r const n
dac e nod frunz nu se schimb nimic
altfel se nlocuiete informaia r->inf cu rezultatul expresiei
ss r->inf sd
unde ss i sd snt informaiile din fiul stng respectiv drept al
nodului curent
Arbori de structur
a = 3, b = 4, c = 6, d = 10, e = 5, f = 2, g = 1
25
-
30
*
3
5/
+
10
+
15
6
10
+
3
5
evaluare(rad->s) + evaluare(rad->d);
evaluare(rad->s) - evaluare(rad->d);
evaluare(rad->s) * evaluare(rad->d);
evaluare(rad->s) / evaluare(rad->d);
Probleme de rezolvat
Eliminarea spaiilor
Utilizarea altor operatori
Utilizarea de identificatori mai lungi