Sunteți pe pagina 1din 2

Arbori

Arborii sunt structuri de date dinamice i omogene. Cele mai comune utilizri ale arborilor sunt cutarea n volume mari de date i reprezentarea de structuri organizate ierarhic.

1. Arbori oarecare
Arborii oarecare sunt colecii de noduri care conin informaia util i legturi ctre descendeni. Fiecare arbore conine un nod iniial numit rdcin. Structura unui arbore oarecare este prezentat n figura urmtoare:

Pentru implementarea unui arbore oarecare n C/C++ se poate folosi o structur de forma:
// tipul de date al informatiilor utile typedef double TipArbore; // structura care reprezinta un nod din arbore struct NodArbore { // informatiile utile stocate in nod TipArbore Informatii; // numarul de legaturi catre fii int numarLegaturi; // vector de legaturi catre fii NodArbore **Legaturi; };

Fiecare nod conine informaiile utile, un ntreg care reine numrul de fii i un vector de pointeri ctre fii. Principalele operaii care pot fi implementate pe un arbore oarecare sunt:

Operaie Adugare nod

Descriere Adaug un nod n arbore dup un anumit criteriu (de exemplu la un anumit nod printe). Operaia presupune alocarea memoriei pentru nod, copierea informaiei utile i modificarea legturii printelui.

tergere nod Parcurgere arbore Cutare element

Presupune dealocarea memoriei pentru nodul respectiv i pentru toi descendenii si i modificarea legturii printelui. Presupune obinerea unei liste care conine toate informaiile utile din arbore. Presupune obinerea unui pointer la un nod pe baza unui criteriu de regsire.

Exemplu de operaie tergerea unui nod:


// sterge un nod din arbore primind ca parametru // o referinta la legatura parintelui void StergereNod(NodArbore* &legaturaParinte) { // stergem nodul si subarborele corespunzator StergereSubarbore(legaturaParinte); // modificam legatura paeintelui legaturaParinte = NULL; } // sterge recursiv un subarbore void StergereSubarbore(NodArbore *nod) { // conditia de oprire din recursie if (nod == NULL) return; // stergem subarborii for (int i = 0; i < nod->numarLegaturi; i++) StergereSubarbore(nod->Legaturi[i]); // stergem nodul curent delete [] nod->Legaturi; delete [] nod; }

// stergem vectorul de legaturi // stergrm nodul

2. Arbori binari
Arborii binari sunt arbori n care nodurile conin cel mult doi descendeni. Pentru memorarea acestor arbori se poate folosi o structur mai simpl de forma:
// tipul de date al informatiilor utile typedef double TipArbore; // structura care reprezinta un nod // dintr-un arbore binar struct NodArbore { // informatiile utile stocate in nod TipArbore Informatii; // vector de legaturi catre fii NodArbore *Stanga, *Dreapta; };

Operaiile sunt aceleai ca i n cazul arborilor oarecare. Exemplu: parcurgerea arborelui n ordinea stnga rdcin - dreapta i stocarea elementelor ntr-o list:

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