190 likes | 420 Views
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree. 高度平衡二元樹. 何謂高度平衡二元樹 (height balanced binary tree) ? 空樹 (empty tree) 是高度平衡二元樹 假使 T 不是空的二元樹, T L 和 T R 分別是此二元樹的左子樹和右子樹,若符合下列二個條件,則稱 T 為高度平衡二元樹,也稱為 AVL-Tree 。 TL 和 TR 亦是高度平衡二元樹, |h L -h R |≦1 ,其中 h L 及 h R 分別是 T L 和 T R 的高度;
E N D
高度平衡二元樹 • 何謂高度平衡二元樹(height balanced binary tree)? • 空樹(empty tree)是高度平衡二元樹 • 假使T不是空的二元樹,TL和TR分別是此二元樹的左子樹和右子樹,若符合下列二個條件,則稱T為高度平衡二元樹,也稱為AVL-Tree。 • TL和TR亦是高度平衡二元樹, • |hL-hR|≦1,其中hL及hR分別是TL和TR的高度; • hL-hR為平衡因子(balanced factor,BF),在AVL-Tree中,每一節點的平衡因子為-1、0或1
高度平衡二元樹 • 一棵二元樹的平衡因子 Q BF= –2 M S BF=1 R P BF=0 BF=1 hL(M)=0, hR(M)=2 hL-hR=-2 BF=0 N
高度平衡二元樹加入及其調整方式 • 利用加入的節點A與它最接近平衡因子絕對值大於1(|BF|>1)的節點B • 高度平衡二元樹可能會因為加入或刪除某節點而造成不平衡,此時必須利用四種不同的調整方式來重建一棵AVL-tree使其平衡。 • 四種調整方式: • LL型:加入新節點於節點s的左子樹之左子樹 • RR型:加入新節點於節點s的右子樹之右子樹 • LR型:加入新節點於節點s的左子樹之右子樹 • RL型:加入新節點於節點s的右子樹之左子樹
高度平衡二元樹加入及其調整方式 原則: • 先找到最接近新節點之平衡因子絕對值大於1(|BF|>1)的祖先節點 • 將其高度降低使其符合AVL的定義 • LL 往右旋轉(rotate) • RR 往左旋轉 • LR 先右後左 • RL 先左後右
高度平衡二元樹加入及其調整方式 • LL型:加入新節點於節點s的左子樹之左子樹 2 0 50 50 40 加入30 調整 1 0 0 40 50 40 30 0 不是一棵AVL-tree 30
高度平衡二元樹加入及其調整方式 例二: 0 1 2 50 50 40 0 1 0 1 0 0 加入20 調整 60 60 50 40 40 30 0 0 1 0 0 0 0 45 45 60 30 30 20 45 0 20
高度平衡二元樹加入及其調整方式 • RR型:加入新節點於節點s的右子樹之右子樹 • 此RR型與LL型大同小異,如加入前的AVL-tree為: 0 0 -2 加入70 調整 60 50 50 0 0 0 -1 70 50 60 60 0 70 不是一棵AVL-tree
高度平衡二元樹加入及其調整方式 例二: 0 -1 -2 60 50 50 加入80 調整 0 0 0 0 -1 -1 70 50 60 60 40 40 0 0 0 0 0 0 -1 80 40 55 70 70 55 55 0 80
高度平衡二元樹加入及其調整方式 • LR型:加入新節點於節點s的左子樹之右子樹 2 50 45 50 加入45 調整 -1 40 40 50 40 0 45
高度平衡二元樹加入及其調整方式 例二: 2 50 50 -1 0 加入42 60 40 60 40 0 1 30 45 30 45 0 42
高度平衡二元樹加入及其調整方式 45 調整 50 40 60 30 42
高度平衡二元樹加入及其調整方式 • RL型:加入新節點於節點s的右子樹之左子樹 -2 加入56 調整 56 50 50 1 50 60 60 60 0 56
高度平衡二元樹加入及其調整方式 例二: -1 -2 加入52 56 調整 50 50 0 0 0 0 0 1 60 50 60 60 40 40 0 0 0 0 0 1 0 70 40 52 70 70 56 56 0 52
高度平衡二元樹刪除及其調整方式 • AVL-tree的刪除與二元搜尋樹的刪除相同,當刪除的動作完成後,再計算平衡因子,作適當的調整,直到平衡因子的絕對值皆小於等於1。
高度平衡二元樹刪除及其調整方式 • 假設存在一棵AVL-tree如左下圖,若欲刪除50,因為它為一樹葉節點,故直接刪除之,成為右下圖,刪除後再進行調整 2 -1 調整 刪除50 30 20 30 0 0 1 20 50 10 30 20 0 0 0 10 25 10 25 25
高度平衡二元樹刪除及其調整方式 • 從樹根尋找pivot點(遇到第一個BF值的絕對值大於1的節點) • 由pivot節點的BF值大於等於0時往左子樹、小於0則往右子樹找下一個節點,來決定調整的型態。
高度平衡二元樹刪除及其調整方式 • 調整規則如下: • 當pivotBF > 0 • pivotllinkBF >= 0 LL型 • pivotllinkBF <= 0 LR型 • 當pivotBF < 0 • pivotrlinkBF >= 0 RL型 • pivotrlinkBF <= 0 RR型