Arbori

Arborii sunt structuri de date dinamice şi omogene. Cele mai comune utilizări ale arborilor sunt căutarea în volume mari de date şi reprezentarea de structuri organizate ierarhic.

1. Arbori oarecare

Arborii oarecare sunt colecţii de noduri care conţin informaţia utilă şi legături către descendenţi. Fiecare arbore conţine un nod iniţial numit rădăcină.

Structura unui arbore oarecare este prezentată în figura următoare:

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 conţine informaţiile utile, un întreg care reţine numărul de fii şi un vector de pointeri către fii.

Principalele operaţii care pot fi implementate pe un arbore oarecare sunt:

Exemplu de operaţie – ş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; // stergem vectorul de legaturi

delete [] nod; // stergrm nodul

}