23
Chapter 9 Chapter 9 高高高高高高高高高 高高高高高高高高高 9.1 何何何何何何何何何何何 9.1 何何何何何何何何何何何 9.2 9.2 AVL-tree AVL-tree 何何何 何何何 9.3 9.3 AVL-tree AVL-tree 何何何 何何何

Chapter 9 高度平衡二元搜尋樹

  • Upload
    donnel

  • View
    67

  • Download
    0

Embed Size (px)

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

Page 1: Chapter 9   高度平衡二元搜尋樹

Chapter 9 Chapter 9 高度平衡二元搜尋樹高度平衡二元搜尋樹

9.1 何謂高度平衡二元搜尋樹9.1 何謂高度平衡二元搜尋樹 9.2 9.2 AVL-treeAVL-tree的加入的加入 9.39.3AVL-treeAVL-tree的刪除的刪除

Page 2: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 2

9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹 高度平衡二元搜尋樹( height balanced

binary search tree )在 1962 年由 Adelson-Velskii 和 Landis 所提出的,因此又稱為 AVL-tree 。

Page 3: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 3

9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹 AVL-tree 定義如下:一棵空樹( empty tree )

是高度平二元搜尋樹。假使 T 不是空的二元搜尋樹, TL 和 TR 分別是此二元搜尋樹的左子樹和右子樹,若符合下列兩個條件,則稱 T 為高度平衡二元搜尋樹: TL 和 TR 亦是高度平衡二元搜尋樹, |hL-hR| < 1 ,其中 hL 及 hR 分別是 TL 和 TR 的

高度。

Page 4: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 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 。

Page 5: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 5

9.19.1 何謂高度平衡二元搜尋樹何謂高度平衡二元搜尋樹

Page 6: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 6

9.2 AVL-tree9.2 AVL-tree 的加入的加入 高度平衡二元搜尋樹可能會因為加入或

刪除某節點而形成不平衡狀態,此時須視不平衡狀態是那一類型,之後,再加以調整之。

通常不平衡的狀態可分為 LL 、 RR 、 LR 與 RL 四大類型。

Page 7: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 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 型。

Page 8: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 8

9.2 AVL-tree9.2 AVL-tree 的加入的加入LL 型 加入前的 AVL-tree :

加入 30 後的 AVL-tree 如下:每個節點的上面數字表示平衡因子。

Page 9: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 9

9.2 AVL-tree9.2 AVL-tree 的加入的加入 此時 50 節點的 |BF|>1 ,因此不為一棵 AVL-tr

ee ,其調整的方法乃將 40 往上提, 50 放在 40 的右方,如下圖所示:

Page 10: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 10

9.2 AVL-tree9.2 AVL-tree 的加入的加入RR 型 此 RR 型與 LL 型大同小異,

如加入前的 AVL-tree 為:

加入 70 後的 AVL-tree 為:

Page 11: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 11

9.2 AVL-tree9.2 AVL-tree 的加入的加入 此時有一節點 50 ,其 |BF|>1 ,因此不

為 AVL-tree ,其型態為 RR 型,調整的方法乃將 60 往上提, 50 放在 60 的左方,如下圖所示:

Page 12: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 12

9.2 AVL-tree9.2 AVL-tree 的加入的加入LR 型 假設有一棵 AVL-tree 如下:

今加入 45 ,則將變為不是一棵AVL-tree ,它是屬於 LR 型,因為加入的節點 45 位於節點50(|BF|>1) 的左邊的右邊。

Page 13: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 13

9.2 AVL-tree9.2 AVL-tree 的加入的加入 調整的方式將 45 往上提,比 45 小的放

在左邊,比 45 大的放在右邊,結果如下所示:

Page 14: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 14

9.2 AVL-tree9.2 AVL-tree 的加入的加入RL 型 基本上 RL 型和 LR 型大致上類似。

有一棵 AVL-tree 如下:

今加入節點 55 後,將變成不是一棵 AVL-tree ,它是 RL 型,因為加入的節點 55 ,位於節點50(|BF|>1) 的右邊的左邊。

Page 15: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 15

9.2 AVL-tree9.2 AVL-tree 的加入的加入 調整的方式將 55 往上提,並將小於 55

的節點放在左邊,大於 55 的節點放在右邊,如下圖所示:

Page 16: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 16

9.39.3 AVL-tree AVL-tree 的刪除的刪除 AVL-tree 的刪除與二元搜尋樹的刪除相

同,當刪除的動作完成後,再計算平衡因子,作適當的調整,直到平衡因子的絕對值皆小於等於 1 。

Page 17: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 17

9.39.3 AVL-tree AVL-tree 的刪除的刪除 假設存在一棵 AVL-tree 如下:

Page 18: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 18

9.39.3 AVL-tree AVL-tree 的刪除的刪除 若欲刪除 50 ,因為它為一樹葉節點,故

直接刪除之。

Page 19: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 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 型,不需再往下搜尋。

Page 20: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 20

9.39.3 AVL-tree AVL-tree 的刪除的刪除 調整結果如下:

Page 21: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 21

9.39.3 AVL-tree AVL-tree 的刪除的刪除 了解 AVL-tree 的刪除及其調整方法後,

我們再來看一個例子。有一棵 AVL-tree如下:

Page 22: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 22

9.39.3 AVL-tree AVL-tree 的刪除的刪除 若欲刪除 80 ,可找到替代節點 90 (右子樹中

最小的節點),如下圖所示:

Page 23: Chapter 9   高度平衡二元搜尋樹

資料結構 - 使用 C 語言 23

9.39.3 AVL-tree AVL-tree 的刪除的刪除 從樹根尋找 pivot 節點,它是 90 那個節點,其

BF 值為 2 大於 0 ,往其左子樹尋找下一節點的 BF 值為 -1 小於 0 ,由此可知調整型態為 LR 型,結果如下: