View
73
Download
0
Category
Preview:
DESCRIPTION
Chapter 9 高度平衡二元搜尋樹. 9.1 何謂高度平衡二元搜尋樹 9.2 AVL-tree 的加入 9.3AVL-tree 的刪除. 9.1 何謂高度平衡二元搜尋樹. 高度平衡二元搜尋樹( height balanced binary search tree )在 1962 年由 Adelson-Velskii 和 Landis 所提出的,因此又稱為 AVL-tree 。. 9.1 何謂高度平衡二元搜尋樹. - PowerPoint PPT Presentation
Citation preview
Chapter 9 Chapter 9 高度平衡二元搜尋樹高度平衡二元搜尋樹
9.1 何謂高度平衡二元搜尋樹9.1 何謂高度平衡二元搜尋樹 9.2 9.2 AVL-treeAVL-tree的加入的加入 9.39.3AVL-treeAVL-tree的刪除的刪除
資料結構 - 使用 C 語言 2
9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹 高度平衡二元搜尋樹( height balanced
binary search tree )在 1962 年由 Adelson-Velskii 和 Landis 所提出的,因此又稱為 AVL-tree 。
資料結構 - 使用 C 語言 3
9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹 AVL-tree 定義如下:一棵空樹( empty tree )
是高度平二元搜尋樹。假使 T 不是空的二元搜尋樹, TL 和 TR 分別是此二元搜尋樹的左子樹和右子樹,若符合下列兩個條件,則稱 T 為高度平衡二元搜尋樹: TL 和 TR 亦是高度平衡二元搜尋樹, |hL-hR| < 1 ,其中 hL 及 hR 分別是 TL 和 TR 的
高度。
資料結構 - 使用 C 語言 4
9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹 在一棵二元搜尋樹中有一節點 p ,其左子樹
(TL) 和右子樹 (TR) 的高度分別是 hL 和 hR ,而BF(p) 表示 p 節點的平衡因子( balanced factor )。
平衡因子之計算為 hL-hR 。在一棵 AVL-tree 裡,每一節點的平衡因子為 -1 或零或 1 ,即 |BF(p) | < 1 。
圖 9-1 不是一棵 AVL-tree ,因為 M 節點的平衡因子是 -2 。
資料結構 - 使用 C 語言 5
9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹
資料結構 - 使用 C 語言 6
9.2 AVL-tree9.2 AVL-tree 的加入的加入 高度平衡二元搜尋樹可能會因為加入或
刪除某節點而形成不平衡狀態,此時須視不平衡狀態是那一類型,之後,再加以調整之。
通常不平衡的狀態可分為 LL 、 RR 、 LR 與 RL 四大類型。
資料結構 - 使用 C 語言 7
9.2 AVL-tree9.2 AVL-tree 的加入的加入 利用加入的節點 A 與它最接近平衡因子
絕對值大於 1(|BF|>1) 的節點 B , 若 A 在 B 的左邊的左邊,則為 LL 型; 若 A 在 B 節點的右邊的右邊,則為 RR 型; 若 A 在 B 節點的左邊的右邊,則為 LR 型; 若 A 在 B 節點的右邊的左邊,則稱為 RL 型。
資料結構 - 使用 C 語言 8
9.2 AVL-tree9.2 AVL-tree 的加入的加入LL 型 加入前的 AVL-tree :
加入 30 後的 AVL-tree 如下:每個節點的上面數字表示平衡因子。
資料結構 - 使用 C 語言 9
9.2 AVL-tree9.2 AVL-tree 的加入的加入 此時 50 節點的 |BF|>1 ,因此不為一棵 AVL-tr
ee ,其調整的方法乃將 40 往上提, 50 放在 40 的右方,如下圖所示:
資料結構 - 使用 C 語言 10
9.2 AVL-tree9.2 AVL-tree 的加入的加入RR 型 此 RR 型與 LL 型大同小異,
如加入前的 AVL-tree 為:
加入 70 後的 AVL-tree 為:
資料結構 - 使用 C 語言 11
9.2 AVL-tree9.2 AVL-tree 的加入的加入 此時有一節點 50 ,其 |BF|>1 ,因此不
為 AVL-tree ,其型態為 RR 型,調整的方法乃將 60 往上提, 50 放在 60 的左方,如下圖所示:
資料結構 - 使用 C 語言 12
9.2 AVL-tree9.2 AVL-tree 的加入的加入LR 型 假設有一棵 AVL-tree 如下:
今加入 45 ,則將變為不是一棵AVL-tree ,它是屬於 LR 型,因為加入的節點 45 位於節點50(|BF|>1) 的左邊的右邊。
資料結構 - 使用 C 語言 13
9.2 AVL-tree9.2 AVL-tree 的加入的加入 調整的方式將 45 往上提,比 45 小的放
在左邊,比 45 大的放在右邊,結果如下所示:
資料結構 - 使用 C 語言 14
9.2 AVL-tree9.2 AVL-tree 的加入的加入RL 型 基本上 RL 型和 LR 型大致上類似。
有一棵 AVL-tree 如下:
今加入節點 55 後,將變成不是一棵 AVL-tree ,它是 RL 型,因為加入的節點 55 ,位於節點50(|BF|>1) 的右邊的左邊。
資料結構 - 使用 C 語言 15
9.2 AVL-tree9.2 AVL-tree 的加入的加入 調整的方式將 55 往上提,並將小於 55
的節點放在左邊,大於 55 的節點放在右邊,如下圖所示:
資料結構 - 使用 C 語言 16
9.39.3 AVL-tree AVL-tree 的刪除的刪除 AVL-tree 的刪除與二元搜尋樹的刪除相
同,當刪除的動作完成後,再計算平衡因子,作適當的調整,直到平衡因子的絕對值皆小於等於 1 。
資料結構 - 使用 C 語言 17
9.39.3 AVL-tree AVL-tree 的刪除的刪除 假設存在一棵 AVL-tree 如下:
資料結構 - 使用 C 語言 18
9.39.3 AVL-tree AVL-tree 的刪除的刪除 若欲刪除 50 ,因為它為一樹葉節點,故
直接刪除之。
資料結構 - 使用 C 語言 19
9.39.3 AVL-tree AVL-tree 的刪除的刪除 從樹根尋找 pivot 點(遇到第一個 BF 值
的絕對值大於 1 的節點)為 30 ,當 pivot 節點的 BF 值大於等於 0 時往左子樹、小於 0 往右子樹找下一個節點,由於節點 30 的 BF 值為 2 大於等於 0 ,故往 pivot 節點的左子樹找到節點 20 ,其 BF值大於等於 0 ,找到此可知調整型態為LL 型,不需再往下搜尋。
資料結構 - 使用 C 語言 20
9.39.3 AVL-tree AVL-tree 的刪除的刪除 調整結果如下:
資料結構 - 使用 C 語言 21
9.39.3 AVL-tree AVL-tree 的刪除的刪除 了解 AVL-tree 的刪除及其調整方法後,
我們再來看一個例子。有一棵 AVL-tree如下:
資料結構 - 使用 C 語言 22
9.39.3 AVL-tree AVL-tree 的刪除的刪除 若欲刪除 80 ,可找到替代節點 90 (右子樹中
最小的節點),如下圖所示:
資料結構 - 使用 C 語言 23
9.39.3 AVL-tree AVL-tree 的刪除的刪除 從樹根尋找 pivot 節點,它是 90 那個節點,其
BF 值為 2 大於 0 ,往其左子樹尋找下一節點的 BF 值為 -1 小於 0 ,由此可知調整型態為 LR 型,結果如下:
Recommended