Chapter 9 高度平衡二元樹:AVL tree,斜張樹 - Ian-Liu-1990/Data-Structure GitHub Wiki
1. AVL tree
滿足條件,需求,甚至解釋什麼是AVL-Tree都TMD指同一件事
1. 定義-
若T為非空的二元搜尋樹,且其每個節點的左,右子樹分別為TL和TR,若滿足
- TL與TR必須皆同時為高度平衡二元搜尋樹
- |hL-hR| <= 1,其中hL與hR分別為TL與TR的高度
- 考題 : 在AVL樹中各節點中之左子樹(TL)、右子樹(TR)之高度差為何?
- 考題 : 下列哪一棵不是AVL树
- 考題 : 下圖為何種資料結構
2. 平衡因子[AVL樹特性與檢查]
一棵二元搜尋樹的任意節點n,平衡因子BF(n) = hL-hR,BF(n)必須只能是-1,0,+1,其中hL與hR分別為節點n的左子樹TL與右子樹TR的高度
BST又符合AVL的特性
3. BST VS- 高度H的AVL Tree,節點數至少F(H+2) - 1,其中F代表富比尼函式
富比尼 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
0 | 1 | 1 | 2 | 3 | 5 |
- 最大歪斜AVL Tree : 節點數最少而高度最高的AVL Tree
- AVL Tree的高度 : Log(N(全部節點數))
- 無法排序,強調樹高和搜尋時間
操作 | BST的時間複雜度 | BST-AVL的時間複雜度 |
---|---|---|
搜尋 | 與樹高有關O(Ht) | 尋找,平均和最壞情況下O(logn) |
插入 | 與樹高有關O(Ht) | 插入,平均和最壞情況下O(logn) |
刪除 | 與樹高有關O(Ht) | 刪除,平均和最壞情況下O(logn) |
建一棵樹 | O(N^2)~O(NlogN) | O(NlogN) |
插入與刪除造成的4個不平衡狀況
4.- 插入和刪除規則 , 當平衡因子 >= 0 "往左走" ;平衡因子 < 0 "往右走"
- 插入 : 是一棵二分搜尋樹,依照二分搜尋樹規則插入,每次從插入的點往樹根方向檢查最鄰近有問題的平衡因子,由平衡因子決定方向檢查LL,RR,LR,RL
- 刪除 : 是一棵二分搜尋樹,依照二分搜尋樹規則刪除
插入/刪除調整規則
5.-
LL : 從失去平衡的根開始L(路徑)-L(路徑)-L(路徑) 或 從失去平衡的根開始L(路徑)-L(路徑)-R(路徑)
-
新Root的右子樹為原本的父節點,新Root的原本右子樹成為原本父節點的左子樹
-
新Root的左子樹為新Root的原本左子樹
-
RR : 從失去平衡的根開始R(路徑)-R(路徑)-R(路徑) 或 從失去平衡的根開始R(路徑)-R(路徑)-L(路徑)
-
新Root的左子樹為原本的父節點,新Root的原本左子樹成為原本父節點的右子樹
-
新Root的右子樹為新Root的原本右子樹