Documente Academic
Documente Profesional
Documente Cultură
09 - Arbori Binari
09 - Arbori Binari
Aplica ii
Arbori binari
Defini ie. Un arbore binar este un arbore orientat cu proprietatea c pentru orice vrf v, od(v)e2. Dac od(v)=2, cei doi descenden i snt desemna i 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 Defini ie. Se nume te arbore strict binar un arbore binar cu poprietatea c pentru orice vrf v, od(v)1. Defini ie. Se nume te nod terminal (sau frunz ) orice vrf v al arborelui cu od(v)=0. n caz contrar nodul v este neterminal.
4 8
5 9
6 10
2 6
3 7
4 8
5 9
10 Subarbore drept
Subarbore stng
n adncime
A-Preordine A-Postordine
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 } } } } } }
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 con in numai operatori binari. Fiecare nod con ine ca informa ie util : un operand, dac este nod frunz un operator, dac nu e nod frunz Arborele se construie te acordnd priorit i operanzilor i operatorilor. Parcurgerea arborelui n preordine => forma polonez direct a expresiei Parcurgere arborelui n inordine => refacerea expresiei (cu sau f r paranteze).
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
-
Construire arbore: 1. Calculare priorit i pentru operanzi i operatori 2. Construire propriu-zis a arborelui
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
1. Calculare priorit i pentru operanzi i operatori operatorii aditivi primesc prioritatea 1 operatorii multiplicativi primesc prioritatea 10 prioritatea fiec rui operator se m re te cu 10 pentru fiecare pereche de paranteze care l include fiecare operand prime te prioritatea maxim (maxint) p[i]= prioritatea elementului i din expresie (operator sau operand, n ordinea apari iei
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. =( Priorit i 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. dac expresia curent este vid , subarborele curent este vid (nil) altfel se caut elementul cu prioritate minim din expresia curent se creeaz un nod r d cin pentru subarborele curent fiul stng este subarborele ob inut prin reprezentarea subexpresiei din stnga elementului curent fiul drept este subarborele ob inut prin reprezentarea subexpresiei din dreapta elementului curent
5.
Arbori de structur
Exemplu: a*(b+c) (d+e)/(f+g)
Elemente expr. =( Priorit i -, - 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. =( Priorit i 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. =( Priorit i 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 f r 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 fiec rui nod r const n dac e nod frunz nu se schimb nimic altfel se nlocuie te informa ia r->inf cu rezultatul expresiei ss r->inf sd unde ss i sd snt informa iile 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 spa iilor Utilizarea altor operatori Utilizarea de identificatori mai lungi