Documente Academic
Documente Profesional
Documente Cultură
L A B O R A T O R
13a
Arbori AVL
Un arbore AVL este un arbore binar de cautare echilibrat in inaltime.
Pentru fiecare nod dintr-un arbore AVL inaltimea subarborelui stanga difera
de inaltimea subarborelui dreapta cu cel mult 1.
In fiecare nod p se memoreaza inaltimea sa, adica numarul de noduri de pe
cea mai lunga ramura care pleaca din nodul p.
Dupa adaugarea unui nou nod se verifica diferenta dintre inaltimile celor
doi subarbori la fiecare nod afectat de adaugare; daca aceasta diferenta este
mai mare ca 1 (in valoare absoluta) atunci se face o rotatie simpla sau dubla
pentru corectarea acestei diferente.
Sa se scrie:
1- Definitia unui tip "tnod" pentru un nod de arbore binar AVL care contine:
o valoare intreaga (val), inaltime nod (h), adrese noduri fii (st,dr).
O functie "make" pentru crearea unui nod frunza cu valoarea "val" si
inaltimea 1.
2- O functie recursiva pentru adaugarea unui nod nou la un arbore binar de
cautare,
cu modificarea inaltimilor nodurilor afectate de adaugare:
void add (tnod* & r, int x); // adauga x la arborele cu radacina r
3- O functie de afisare prefixata cu indentare, care marcheaza absenta unui
fiu
printr-un minus ('-'), dar nu si absenta ambilor fii (nodurile frunza nu sunt
urmate de '-'). Se va afisa valoarea si inaltimea fiecarui nod (intre
paranteze).
Exemplu de afisare dupa adaugarea valorilor 5,8,3,6,7
5(4)
3(1)
8(3)
6(2)
7(1)
Sa se verifice impreuna cu functia de adaugare "add" prin creare si afisare
arbore.
4- Functiile de rotatie a radacinii unui arbore la stanga (rotL) si la dreapta
(rotR), prin inlocuire cu fiul dreapta si respectiv cu fiul stanga. Prima
instructiune afiseaza litera 'L' sau 'R' si valoarea din nodul rotit
(radacina).
Sa se verifice rotind la stanga radacina arborelui (1(-,2(-,3)) si la dreapta
radacina arborelui (3(2(1,-),-))