Sunteți pe pagina 1din 4

Arbori binari

Definire: Arborii sunt structuri de date dinamice i omogene. In arborescen, exist un nod numit rdcin sau printe. Acesta are descendeni. Fiecare descendent poate fi, la rndul su, printe i, n acest caz, are descendeni. Arborele binar este caracterizat prin aceea c, orice nod al su are un singur printe i maxim doi descendeni. Fiecare nod este reprezentat prin trei informaii i anume: - informaia util care face obiectul prelucrrii, ea descriind elementul sau fenomenul asociat nodului; - informaia care localizeaz nodul printe; - informaia (informaiile) care localizeaz nodul (nodurile) descendent (descendente). Arborele binar A este o mulime de chei care poate fi, fie vid, fie conine un element numit rdacin i exact doi arbori binari As i Ad, A= { r , As , Ad } .

Rangul unui nod reprezint numrul de subarbori asociai cu acel nod. Un nod care are rangul 0 se numete frunz. Pentru arborele binar A, definit mai sus, radcinile r s i rd ale subarborilor As i Ad, se numesc fii ai rdcinii r a arborelui A, iar r se numete printele lui rs i rd. Din definiie se observ c oricare dintre mulimile A, As i Ad poate fi vid, n consecin orice nod din arborele binar poate avea 0, 1 sau 2 fii. Reprezentarea pe niveluri determina sa nu mai fie necesar sensul arcelor. Fiecare varf poate fi considerat radacina pentru un subarbore. Evident, pentru fiecare varf vom avea subarborele stang si subarborele drept, eventual unul din ei sau amandoi putand fi arbori vizi (fara nici un varf).

Arborii binari sunt arbori n care nodurile conin cel mult doi descendeni. Pentru reprezentarea n memorie a unui nod dintr-un arbore binar este nevoie de 3 cmpuri: un cmp ce conine informaia util, i dou cmpuri pentru a memora legturile nodului cu subarborele stng, respectiv subarborele drept. Pentru memorarea acestor arbori se poate folosi o structur mai simpl de forma:
struct nod_arb { int inf; nod_arb *st, *dr; };

Un arbore in care operaiile de cutare sunt foarte rapide se numte arbore de cutare. Arborii de cutare sunt folosii pentru a memora o mulime finit de chei alese dintr-o multime total ordonat de chei. Fiecare nod din arborii de cutare conine una sau mai multe chei i toate cheile din arbore sunt unice. Nu se memoreaz chei duplicate. Diferena dintre arborii oarecare i arborii de cutare este c n arborii de cutare cheile nu sunt memorate n noduri arbitrare din arbore. n schimb, exist un criteriu de ordine care determin unde trebuie memorat o cheie ce se afl n relaie cu alte chei din arbore. Arborii binari de cutare sunt arbori binari n care nodurile sunt memorate ordonat n funcie de o cheie. Toate nodurile din arbore au n subarborele stng noduri care au chei mai mici i n subarborele drept chei mai mari. Parcurgerea unui arbore de cutare n ordinea stnga rdcin dreapta conduce la obinerea listei nodurilor n ordinea cresctoare a cheilor. Arborii binari de cutare sunt perfect echilibrai dac pentru fiecare nod din arbore numrul de noduri din subarborele stng difer de numrul de noduri din subarborele drept prin cel mult un nod. Deoarece operaiile de inserare i tergere nu permit meninerea echilibrrii perfecte a unui arbore, iar restructurarea arborelui dup aceste operatii este o procedur foarte complex, de obicei se prefer arbori imperfect echilibrai care vor fi numii arbori echilibrai. Un arbore este echilibrat dac si numai dac, pentru orice nod, naltimile celor doi subarbori difer cu cel mult 1. Arborele perfect echilibrat este cel n care, pentru fiecare nod, numarul de noduri ale subarborelui stng difera de cel pentru subarborele drept cu cel mult o unitate. Arborele perfect echilibrat are o serie de proprietati dintre care se remarca faptul ca nodul radacina si nodurile interne au strict 2 descendenti. Operaii pe arbori binari: Operaiile pe arbori se grupeaz n urmtoarele categorii: Operaii de creare a arborilor binari.

Crearea arborilor binari presupune construirea n memorie a unui arbore binar folosind informaii din mediul extern, sursele cele mai frecvente fiind introducerea de la tastatura de ctre utilizator sau fiierele. Algoritmii de creare ai unui arbore binar presupun a cunoate relaiile n care se afl un nod cu celelate noduri din arbore. O metod simpl de a specifica aceste relaii este ca dup crearea unui nod s se specifice fiul stng i fiul drept, dac ei exist. Operaii cu elemente (noduri), categorie din care cele mai importante sunt operaiile de inserare i tergere de noduri n i din arbore.

Deoarece operaia de inserare a unui nod necesit specificarea relaiei n care se afl nodul respectiv cu celelate noduri din arbore, iar tergerea unui nod implic formarea unor noi relaii ntre noduri, aceste operaii sunt uor de definit in cazul n care peste mulimea informaiilor din noduri exist o relaie de ordine. Traversri de arbori att pentru prelucrarea informaiei utile ct i pentru cutare de informaie n arbore. Cele mai frecvente moduri de traversare utilizate n cazul arborilor binari sunt: preordine: traversarea se face prin rdcina arborelui, apoi se traverseaz subarborele stng, iar apoi subarborele drept;

void RSD(nod *r) { if (r) { printf(r->inf); RSD(r->st); RSD(r->dr);} }

inordine: traversarea se face ncepnd cu subarborele stng, apoi prin rdcin, iar apoi se traverseaz subarborele drept;

void SRD(nod *r) { if (r) { SRD(r->st); printf(r->inf); SRD(r->dr);} }

postordine: traversarea se face ncepnd cu subarborele stng, apoi se traverseaz subarborele drept, iar apoi rdcina.

void SDR(nod *r) { if (r) { SDR(r->st); SDR(r->dr); printf(r->inf);} }

Algoritmul pentru operaia de cutare ntr-un arbore binar de cutare este urmtorul: 1. Se compar cheia cutate cu cheia din radcin; 2. Dac sunt egale algoritmul se incheie; 3. Dac valoarea cheii cutate este mai mic dect valoarea din rdacin atunci se va relua algoritmul pentru subarborele stng. Dac nu exist subarbore stng, inseamn c informaia cutat nu se gsete in arbore;

4. Altfel, dac valoarea cheii cutate este mai mare dect valoarea cheii din radacin, se va relua algoritmul pentru subarborele drept. Dac nu exist subarbore drept, inseamn c informaia cutat nu se gsete in arbore; Conversii i stocare n fiier.

Conversiile i stocarea n fiiere presupune traversarea arborilor i salvarea informaiilor n alte structuri de date aflate n memorie sau n fiiere pe medii de stocare. Exemplul 1: S se construiasca un arbore binar de cautare si sa se traverseze in preordine, inordine, postordine, in situatia in care informatia unui nod este de tip articol, compusa din campurile cod, nume si varsta, asociate unui student. Exemplul 2: S se construiasca un arbore binar de cautare si sa se traverseze in situatia in care informatia unui nod este de tip pointer la student. Exemplul 3: S se scrie functia pentru numararea elementelor dintr-un arbore binar de cautare. Exemplul 4: S se scrie functia pentru cautare recursiva a studentului cu un anumit cod citit de la tastatura. Exemplul 5: S se scrie functia pentru determinarea elementului minim i elementului maxim dintrun arbore binar de cutare. Exemplul 6: S se scrie functia pentru determinarea numarului de nivele ale unui arbore binar de cautare. Exemplul 7: S se realizeze conversia unei stive intr-un arbore binar de cautare.

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