![]() XHost |
Oferim servicii de instalare, configurare si monitorizare servere linux (router, firewall, dns, web, email, baze de date, aplicatii, server de backup, domain controller, share de retea) de la 50 eur / instalare. Pentru detalii accesati site-ul BluePink. |
Inserarea nodurilor in arbori AVL
O insertie intr-un arbore binar ordonat poate duce la dezechilibrarea anumitor noduri, dezechilibrare manifestata prin nerespectarea formulei de pe slide-ul anterior pentru respectivele noduri.
Daca
in cazul arborilor binari ordonati simpli aceste situatii nu deranjeaza
(acestia nefiind suficient de competenti pentru a le rezolva), in cazul
arborilor AVL ele trebuie rezolvate pentru a asigura faptul ca si dupa o
insertie sau o suprimare, arborele ramane un arbore AVL
Vom
discuta in continuare numai despre cazurile care apar la insertia
cheilor, urmand sa tratam la final suprimarea cheilor folosindu-ne de
aceleasi cazuri
Principial,
o cheie se insereaza intr-o prima faza, ca si intr-un arbore binar
ordonat obisnuit, adica se porneste de la radacina si se urmeaza fiul
stang sau fiul drept, in functie de relatia dintre cheia de inserat si
cheia nodurilor prin care se trece, pana se ajunge la un fiu nul, unde
se realizeaza insertia propriu-zisa
In
acest moment se parcurge drumul invers (care este unic) si se cauta pe
acest drum primul nod care nu este echilibrat, adica
primul nod ai carui subarbori difera ca inaltime prin 2 unitati
Acest
nod trebuie echilibrat si el se va afla intotdeauna intr-unul din cele 4
cazuri prezentate in continuare
Cazul 1-stanga:
Cazul
1-dreapta (simetric in oglinda fata de cazul 1-stanga):
Cazul 2-stanga
Cazul
2-dreapta (simetric in oglinda fata de cazul
2-stanga):
Pentru exemplificare, vom considera o situatie in care o insertie intr-un arbore AVL necesita reechilibrarea arborelui
Insertia
cheii ‘i’ se face ca intr-un arbore binar
obisnuit, in dreapta cheii ‘h’
Dupa
insertie, se pleaca de la nodul inserat si se
merge inapoi catre radacina, verificand ca toate
nodurile intalnite sa respecte formula de
echilibru AVL
Primul
nod dezechilibrat pe calea de cautare este nodul
‘g’
Trebuie sa echilibram subarborele care are radacina ‘g’
Daca
echilibram acest subarbore, intreg
arborele va deveni un arbore AVL
Pentru aceasta, consideram doar subarborele cu radacina ‘g’ si stabilim in care dintre cele 4 cazuri de echilibrare ne situam
Se observa usor ca este vorba despre cazul 2-dreapta, deoarece cheia ‘i’ (cea care a dus la cresterea arborelui) se afla in subarborele rosu in raport cu cheia ‘g’ (daca s-ar fi aflat in subarborele mov, ne situam in cazul 1-dreapta)
In continuare, identificam pe arborele nostru concret, componentele modelului, folosind culori corespunzatoare
Pentru echilibrare, nu trebuie decat sa echilibram modelul corespunzator cazului 2-dreapta si apoi sa reconstruim arborele concret, pornind de la model si de la componentele identificate
Reechilibrarea
se face relativ simplu:
nRadacina arborelui echilibrat trebuie sa fie nodul albastru deschis, si pe slide-ul anterior am identificat acest nod ca fiind nodul ‘h’
nIdem pentru celelalte doua noduri cu nuante de albastru
nSubarborele verde trebuie legat la stanga nodului albastru inchis, si pe slide-ul anterior am identificat subarborele verde ca fiind cel ce contine doar cheia ‘d’
nIdem pentru ceilalti subarbori colorati, cu mentiunea ca subarborele galben este subarborele vid, deci nu a mai fost reprezentat
Subarborele
echilibrat este
desenat mai jos,
cu noduri
albastre
Legand
acest subarbore
de arborele
initial, acesta
devine
echilibrat AVL
la randul sau
Practic,
am inserat in
arborele initial
cheia ‘i’ care a
provocat
dezechilibrarea
arborelui, dupa
care am aplicat
cazul de
reechilibrare
2-dreapta asupra
subarborelui
corespunzator si
am reobtinut un
arbore AVL