Metode si Tehnici de programare - limbajul C++Adrian Runceanu |
Capitolul 6 - ARBORI BINARIA.Consideratii teoretice Definitie: Numim arbore un graf conex si fara cicluri. Un arbore este determinat de cateva proprietati:
In acest exemplu avem un arbore cu 9 noduri, in care nodul 1 este radacina si care se afla pe nivelul 1, are trei fii - nodurile 2, 3 si 4 de pe nivelul 2, nodul are doi fii - nodurile 5 si 6, nodul 3 este un nod terminal, iar nodul 4 are un fiu - nodul 7 - toate se afla pe nivelul 3, iar pe nivelul 4 se afla fii nodului 6 - nodurile 8 si 9, pentru ca nodurile 5 si 7 sunt noduri terminale. Definitie: Numim arbore binar un arbore in care fiecare nod are zero, unul sau cel mult doi fii (descendenti). Definitie: Un arbore binar cu proprietatea ca fiecare nod cu exceptia frunzelor (nodurilor terminale) are exact doi descendenti se numeste arbore binar complet. 1. Se specifica radacina RAD si pentru fiecare nod se precizeaza descendentul stang si descendentul drept, in cazul in care acestia exista. Acesti descendenti de retin cu ajutorul unor vectori numiti chiar ST si DR, astfel pentru un nod I, ST[i] reprezinta descendentul stang, DR[i] descendentul drept, iar INF[i] reprezinta informatia atasata arborelui. Atunci cand un descendent lipseste se specifica valoarea zero. Avem n = 7 noduri, RAD = 1 si ST = { 2, 0, 5, 0, 6, 0, 0 } si DR = { 3, 0, 4, 0, 7, 0, 0 }. 2. Se folosesc vectorii TATA care precizeaza pentru fiecare nod i, nodul parintelui sau – TATA[i] si DESC, vector care retine valorile –1 sau 1 in functie de nodul i care este fie descendent stang, fie descendent drept. Pentru acelasi exemplu, vectori considerati mai sus au urmatoarele valori: TATA = { 0, 1, 1, 3, 3, 5, 5 } si DESC = { 0, -1, 1, 1, -1, -1, 1 }. 3. Se foloseste alocarea dinamica a memoriei astfel incat fiecare nod este compus din un camp de informatie si doua campuri de adrese stanga si dreapta. Definirea unui astfel de nod se face astfel: typedef struct pnod
Parcurgerea arborilor binari Pentru a putea prelucra informatiile dintr-un arbore, trebuie sa parcurgem nodurile arborelui. Exista trei modalitati de parcurgere a arborilor de binari: nodurile pot fi vizitate in preordine, inordine si postordine. Aceste metode sunt definite recursiv, astfel daca arborele este vid atunci el este traversat fara a se face nimic; altfel traversarea se face in trei etape. 1) Travesarea in preordine
2) Travesarea in inordine
3) Travesarea in postordine
B.Exemple de programe 1. Prezentam in continuare programul in limbajul Borland C++ care implementeaza cele trei tipuri de parcurgere de mai sus, in reprezentarea arborilor static folosind vectorii ST si DR. 2. Prezentam in continuare programul in limbajul Borland C++ care implementeaza cele trei tipuri de parcurgere de mai sus, in reprezentarea arborilor dinamic folosind pointeri. Vom construi arborele binar recursiv: 3. Sa se creeze un arbore binar cu informatii numere intregi, apoi sa se tipareasca suma elementelor pare din arbore. 4. Sa se construiasca un arbore binar si apoi sa se caute o valoare data, specificandu-se daca este sau in arbore. C. Exercitii si teme 1. Sa se ruleze programele prezentate mai sus.
|
Copyright adrian.runceanu.ro: 2009-2016 |