Transcript 第6 章

6.6 引線二元樹
訂正:6-61 6.6 下第 2 列 24-1 應為 24 -1
1
二元樹轉換成引線二元樹範例(1)
A
A
B
C
B
D
E
C
G
F
D
H
E
G
F
I
H
2
I
二元樹轉換成引線二元樹範例(2)
3
1: 子樹鏈結
0: 引線鏈結
左
4
引線二元樹的優點
可利用 l_flag 及 r_flag 來判斷節點有幾個子樹
進行前序、中序、後序追蹤時,可以直接利用引線鏈
結,不必使用遞迴,效能較佳


引線二元樹的缺點

5
新增及刪除節點時必須重建引線,較原二元樹複雜許
多
引線二元樹新增節點範例
6
6.7 二元搜尋樹、平衡樹、B 樹
6.7.1


二元搜尋樹是一棵二元樹,每一個節點上均存放一個鍵值
資料,並且樹根之鍵值大於左子樹的所有鍵值,小於或等
於右子樹的所有鍵值,並且左右子樹也是二元搜尋樹。
33
11
78
20
48
33+
7
99
55
二元搜尋樹的新增節點
複習:依序新增 128, 20, 80, 66, 135, 5, 141, 70
8
二元搜尋樹的刪除節點
9
二元搜尋樹的刪除節點範例(1)
10
二元搜尋樹的刪除節點範例(2)
33
11
78
20
48
99
33+
刪除11
55
刪除78
刪除33
33
33+
33
11
20
78
48
33+
55
78
11
99
99
20
48
99
55
20
48
33+
55
二元搜尋樹的刪除節點 (ch6_tree_7.java, ch6_tree_4.java)
共 3 種情況

1.
2.
葉節點:直接刪除
節點分支度為 1
1.
2.
3.
只有右子樹、沒有左子樹:將節點的父節點的(左or 右)子樹鏈
結指到此節點的右子樹的樹根節點 (如:第 10 頁投影片 (a) 中的
66 )
只有左子樹、沒有右子樹:將節點的父節點的(左or 右)子樹鏈
結指到此節點的左子樹的樹根節點 (如:第 10 頁投影片 (a) 中的
80 )
節點分支度為 2
從該節點的右子樹中找到 擁有大於或等於此節點資料並且是最接
近的值的節點,也就是中序追蹤之後繼節點,來取代目前節點
,但須重組右子樹 (如:第 10 頁投影片 (a) 中的 20 及 128 )
12
6.7.2 高度平衡二元樹

為了避免二元樹過度歪斜 (也就是左子樹與右子樹的深度相
差太大),常須將二元樹調整成高度平衡二元樹,使其所有
節點的左子樹與右子樹的深度相差最多為 1
節點左邊的數
字代表其左、
右子樹的深度
相減的結果
13
6.7.3 B 樹

二元搜尋樹擴充至 3 階搜尋樹
T
95
21
P0,1
T1
2
λ
14
P2,3
P1,2
T3
T2
78
11
λ
λ
λ
99 128
λ
λ
λ
λ
6.7.3 B 樹

將節點子樹數目由 2 擴充成 m,資料數目由 1 擴充成 m-1

一個 m 階 B樹結構就是一個高度 ≧1 的m階搜尋樹,樹上
的每一節點均為 m 階節點,並具有以下特徵:
1.每一節點之分支度均小於等於 m。
2.每一個節點最多含有 m-1 個鍵值。
3.樹根節點至少有兩個子節點,除非它也是樹葉。
4.除了樹根節點和樹葉節點外的每一個節點至少都含
有 m/2 個子節點,最多有 m 個子節點。
5.所有樹葉節點均在同一層,亦即從樹根節點到樹葉節點
所經之路徑長度均相同。
6.樹的高度增加只發生於樹根節點一分為二時
15
B 樹新增資料的處理: 詳細步驟在 p.6-89
範例 (4-階 B 樹)
16
B 樹新增資料的處理範例(分裂過程)
17
B 樹刪除資料的處理:詳細步驟在 p.6-93
範例(3-階 B 樹)
18
6.8 樹狀結構的應用
--6.8.1 集合表示法和應用(跳過)

6.8.2 霍夫曼樹與資料壓縮(參考資訊概論上學期第 3 章 p43-46)
• 霍夫曼樹:
得到霍夫曼
編碼的方法
資料元素
s
m
i
l
19
霍夫曼碼
100
101
0
11

“queue”可壓縮成 “10 11 0 11 0”
5
0
3
0
2
1
e
1
2
2
1
2
q
u
e
q
u
│L│= 3
3
0
e
q
1
2
u
│L│= 1
(a)
霍夫曼碼
10
11
0
(b)
20
2
1
│L│= 2
資料元素
q
u
e
1