Académique Documents
Professionnel Documents
Culture Documents
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.
1 1
1 1
1 1 1
1 1
1 1
1 1
1 1
1 1 Subarbore drept
Subarbore st ng
n adncime
void preordine(TNOD* r) A-Preordine Preordine { if(r!=NULL) { //prelucrare r->info A-Postordine Postordine preordine(r->st); Inordine preordine(r->dr); } } void inordine(TNOD* r) { if(r!=NULL) void postordine(TNOD* r) { inordine(r->st); { if(r!=NULL) //prelucrare r->info { postordine(r->st); inordine(r->dr); postordine(r->dr); //prelucrare r->info } } } }
Preordine : 10, 6, 4, 2, 1, 3, 5, 8, 7, 9, 13, 12, 11, 15, 14, 16 Inordine : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 Postordine: 1, 3, 2, 5, 4, 7, 9, 8, 6, 11, 12, 14, 16, 15, 13, 10 Pe niveluri: 10, 6, 13, 4, 8, 12, 15, 2, 5, 7, 9, 11, 14, 16, 1, 3
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 operatorii aditivi primesc prioritatea 1 operatorii multiplicativi primesc prioritatea 10 prioritatea fiecrui operator se mrete cu 10 pentru fiecare pereche de paranteze care l include fiecare operand primete prioritatea maxim (maxint)
Prioritile snt nscrise ntr-un vector. p[i]= prioritatea elementului i din expresie (operator sau operand, n ordinea apariiei
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)
Construire arbore: algoritm recursiv. 1. 2. 3. 4. 5. dac expresia curent este vid, subarborele curent este vid (nil) altfel se caut elementul cu prioritate minim din expresia curent se creeaz un nod rdcin pentru subarborele curent fiul stng este subarborele obinut prin reprezentarea subexpresiei din stnga elementului curent fiul drept este subarborele obinut prin reprezentarea subexpresiei din dreapta elementului curent
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
Elemente expr. =( Prioriti -, - d, +, e, /, f, +, g) =(maxint,10,maxint,11,maxint,1,maxint,11,maxint,10,maxint,11,maxint) 1 a, *, b, +, c,
a*(b+c) (d+e)/(f+g) a
a * b + c (maxint, 10, maxint, 11, maxint) a (maxint)
* b+c (d+e)/(f+g)
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)
* a
() () () ()
(d+e)/(f+g) * a b + c (d+e)/(f+g)
b+c
b + c (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)
* a b + c (d+e)/(f+g) a b * + c
/ d+e f+g
d + e / f + g (maxint,11,maxint,10,maxint,11,maxint)
Arbori de structur
Parcurgerea arborelui n preordine => forma polonez direct a expresiei:
-*a+bc/+de+fg
Parcurgere arborelui n inordine => refacerea expresiei (cu sau fr paranteze SRD sau (S)R(D) ):
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 4 + 10 6 10 + 15 5
5 / + 3 2 1
Probleme de rezolvat
Eliminarea spaiilor Utilizarea altor operatori Utilizarea de identificatori mai lungi