Свойство височинен
баланс (Height-Balance Property): За всеки вътрешен
възел v от T разликата
във височините на децата му може да бъде най-много 1.
AVL дърво е двоично търсещо дърво със свойството
височинен баланс.
Adel'son-Vel'skii and Landis (Адельсон-Вельский, Ландис -
1968).
Един възел в балансиран, ако разликата във височините на
децата му е най-много 1.
Твърдение:
Височината на AVL дърво, съхраняващо n ключове е O(log n).
Вмъкване в AVL дърво
expandExternal(w)
Нека z е
първият възел бъде първият небалансиран възел, който срещаме
по пътя от w към
корена на T.
Нека y означава
детето на z с
по-голяма височина.
Нека x е детето
на y с по-голяма
височина.
Тривъзелна реконструкция след
вмъкване
restructure(x)
Нека (a, b, c)
са x, y, z в
редицата при inorder обхождане. Извършваме ротация такава, че
b да е най-горе в
дървото.
Пример:
Има 4 възможни начина за изобразяване на (x, y, z)
в (a, b, c).
Пример:
Премахване на възел от AVL дърво
removeElement(k)
Премахването започва в двоичното търсещо дърво, което
означава, че премахнатия възел става (празен) външен възел.
Неговият родител w
може да стане небалансиран възел.
Пример:
Ребалансиране след премахване
Нека z е
първият небалансиран възел w по пътя от w към
корена на дървото.
Нека y е детето
на z с по-голяма
височина.
Нека x е детето
на y с по-голяма
височина.
Изпълняваме операция restructure(x) за да възстановим баланса на z.
Тъй като това преструктуриране може да нарушава баланса
на друг възел по-високо в дървото, трябва да продължим
проверката за баланс до достигане на корена на T.
Времена за изпълнение на операциите на речник АТД с реализация
като AVL дърво
Една реконструкция отнема време O(1).
като използваме реализация на двоично дърво със
свързана структура
find е O(log n)
височината на дървото е O(log n),
няма реконструкции
insert е O(log
n)
началното търсене е O(log
n)
преструктуриране нагоре по дървото - не повече от O(log n)
remove е O(log
n)
началното търсене е O(log
n)
преструктуриране нагоре по дървото - не повече от O(log n)