Sunteți pe pagina 1din 2

Reprezentarea arborilor cu rădăcină prin vectori

Definiţie: Un arbore cu rădăcină este o mulţime finită de noduri care, fie este vidă, fie:
- există un nod special numit rădăcina arborelui;
- toate celelalte noduri sunt partiţionate în n≥0 clase X1, X2, ...,Xn , fiecare clasă fiind un arbore cu
rădăcină. Rădăcina arborelui este unită prin muchii de rădăcinile arborilor X1, X2, ...,Xn .
Definiţia este recursivă, orice nod al unui arbore fiind rădăcina unui subarbore şi conduce la o ierarhizare a
nodurilor arborelui:
- nodul rădăcină r se situează pe nivelul 0
- dacă notăm cu r1 , r2 , …, rn respectiv rădăcinile arborilor X1 , X2 , ..., Xn, nodurile r1 , r2 , ..., rn vor
constitui nivelul 1 în arbore, ş.a.m.d.
Nodurile r1, r2, ..., rn, se numesc fiii nodului rădăcină, iar rădăcina r reprezintă părintele nodurilor r1, r2, ...,
rn, rădăcina fiind singurul nod din arbore care nu are părinte. Fiecărei muchii din arbore îi putem asocia o
orientare de la părinte spre fiu. În plus, fiii nodurilor de pe nivelul i≥0, vor constitui nivelul i+1.

Reprezentarea unui arbore cu rădăcină se poate realiza printr-un vector de taţi t. Vectorul are câte un element
pentru fiecare nod al grafului şi t[x] este nodul părinte al nodului x. Părintele rădăcinii este 0.

Tema: fie un arbore cu rădăcina T cu n noduri, rădăcina fiind etichetată cu valoarea 0 şi fiii fiecărui nod
etichetaţi cu valori de la 1 la n-1 astfel ca fiii unui nod etichetat cu valoarea i sunt etichetaţi cu valori j cu j> i.

Reprezentarea acestui arbore se poate face printr-un vector de taţi, vector t cu n=10 elemente,
t=[0, 0, 1, 1, 3, 3, 3, 0, 7, 8].

1
Să se scrie un program care citeşte un arbore cu rădăcină T de tipul dat şi care:
1. (10p) Verifică dacă vectorul citit este vector de taţi valid.
2. (20p) Construieşte un vector depth în care depth[i]= adâncimea nodului i. Adâncimea unui nod x al unui
arbore este distanţa celui mai scurt lanţ de la nodul x la rădăcina r.
3. (10p) Verifică dacă arborele citit este arbore binar (fiecare nod are cel mult doi fii).
4. (30p) Dacă arborele este binar, verifică dacă arborele este arbore echilibrat. Un arbore binar este
echilibrat dacă numărul de noduri din subarborele stâng diferă de numărul de noduri din subarborele
drept prin cel mult 1, pentru fiecare nod al grafului.
5. (30p) Calculează pentru fiecare nod diametrul subarborelui care îl are ca rădăcină. Diametrul unui arbore
este cea mai mare distanţă între două noduri în subarborele respectiv. Distanţa între două noduri este
minimul lungimilor lanţurilor dintre cele două noduri.
Datele de intrare sunt n- numărul de noduri, şi elemente vectorului de taţi t, pe o linie, separate prin spaţiu.
Punctajele întregi se acordă numai dacă algoritmii sunt liniari.

Exemple:

Input
500012
Output
01122
arborele este binar
arborele este echilibrat
41100

Input
500123
Output
01234
arborele este binar
arborele nu este echilibrat
43210

Input
500000
Output
01111
arborele nu este binar
20000

Input
6001214
Output
012323
arborele este binar
arborele nu este echilibrat
441010

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