AVL樹原理通俗解釋與例子
阿新 • • 發佈:2019-01-26
- AVL(Adelson-Velskii and Landis)樹是帶有平衡條件(balance condition)的二叉查詢樹。
- 這個平衡條件必須容易保持,而且必須保證樹的深度是O(logN)。
- AVL樹規定其每個結點的左子樹和右子樹的高度最多差1。
- BF(Balance Factor) = 二叉樹上結點的左子樹深度 - 右子樹的深度。
- 平衡二叉樹上的結點的BF值只能是1 -1 0,只要有一個結點的平衡因子絕對值大於1,就不平衡。
構造AVL樹的時候,發生不平衡時:
單向右旋平衡處理RR:
由於在a的左子樹的左子樹進行插入(LL)則需進行一次右旋轉操作(R);單向左旋平衡處理LL:
由於在a的右子樹的右子樹上插入(RR),則需進行一次左旋轉操作(L);雙向旋轉(先左後右)平衡處理LR:
由於在a的左子樹的右子樹上插入結點(LR),則需進行兩次旋轉(先左旋後右旋)操作(LR)。雙向旋轉(先右後左)平衡處理RL:
由於在a的右子樹左子樹上插入結點(RL),則需進行兩次旋轉(先右旋後左旋)操作(RL)。附:雙向旋轉的步驟:
1.把子結點的BF值通過旋轉變成與根節點符號相同(以子結點為中心旋轉)。
2.以根節點為中心旋轉。例: