下載/瀏覽

Download Report

Transcript 下載/瀏覽

紅黑樹
(Red-Black Tree)
13
8
1
17
11
15
6
四晶片四甲
25
22
49437050
27
張英舜
什麼是紅黑樹?
是一種二元搜查平衡樹。
是一種將二元樹平衡化之技巧。
1972年,由魯道夫·貝爾(Rudolf Bayer )
發明。
魯道夫·貝爾
何時使用?
當二元樹本身不平衡狀況十分嚴重時。
平衡的二元樹(如圖)
極不平衡的二元樹(如圖)
紅黑樹之特性
均為兩個黑節點
13
8
1
NEW
17
11
6
15
25
22
所有的路徑上的黑節點數目相等
紅節點與黑節點交錯出現
增加之節點均為紅色
節點為紅色或黑色
根節點均為黑色
27
2-3-4樹轉成紅黑樹
紅節點,用來表示3-節點或4-節點。
3-節點轉換成2-節點連接著2-節點。
(如圖)
4-節點轉換成2-節點連接兩個2-紅節點。
(如圖)
紅黑樹之插入
插入資料後,若無破壞本身特性,即不需
調整。
 若破壞本身特性,即利用旋轉將其調整。

需旋轉之情形
C
A
B
B
A
C
B
C
A
C
A
A
C
B
B
如何旋轉?(1/3)
1. 當子節點到祖父節點C的路上沒有轉彎時。
2. 以祖父節點“樞軸”,父節點為“旋轉體
“旋轉。
3. 再來調整顏色。
旋轉1動作說明
B
C
C
B
A
如何旋轉?(2/3)
1. 當子節點到祖父節點C的路上有轉彎時。
2. 將子節點指向父節點。
3. 做旋轉動作,變成上ㄧ狀況。
4. 再依上ㄧ狀況處理即可。
旋轉2動作說明
A
C
B
A
B
如何旋轉? (3/3)
1. 當用旋轉也無法避免連續兩個紅節點時。
2. 祖父節點與父叔節點顏色對調。
3. 若根節點變成紅色,須將其塗成黑色。
旋轉3動作說明
C
B
A
D
紅黑樹刪除要點
紅黑樹刪除動作,與ㄧ般平衡樹是一樣的。
但前提是不破壞平衡。
在破壞平衡時,必須做調整的動作。
紅黑樹之刪除(1/2)
要刪除的點,會被移轉到某一個點。而這
以右圖為例:欲刪除B點資料,須將B點
個點至少要有一個子點是黑色的空葉子。
與C點作移轉。
A
B
D
C
E
F
紅黑樹之刪除(2/2)
x指標所指的若為紅節點,那只要將其設
成黑色。
若所指為黑色,那將會面臨以下四種狀況。
(設定w指標,指向x的兄弟節點)
B
x
w
A
D
C
E
狀況一
x指標所指為黑色。
1. 指標x之父節點與w的顏色對調。
2. 向左翻轉的動作。
B
x
A
D
w
D
C
B
E
x A
E
C new w
狀況二
w為黑色,且兩子節點都是黑。
1. 將w設成紅色。
2. x指標移到原x指標的父節點。
開始下一輪的疊代。
new x
B
x
A
B
w
D
C
A
E
D
C
E
狀況三
w為黑色,w指標的兩子節點是左紅右黑。
1. 將w節點與w的左子節點顏色對調。
2. 做向右翻轉的動作。
B
x
A
x
w
A
D
C
B
E
new w
C
D
E
狀況四
w為黑色,且右子節點是紅色。
1. 做向左翻轉的動作。
2. 節點E所在位置少了一個黑色,因此,再
將原為紅色的E節點塗黑即可。
x
B
A
D
w
D
C
B
E
A
D
E
C
B
A
E
C
結
論
紅黑樹的插入與刪除,均必須利用旋轉來
調整,因此,必須熟練旋轉的技巧。
紅黑樹在對刪除與插入時間,有著良好的
最壞情況運行時間,並且在實踐中是高效
的。
參考資料
書名:資料結構與C++演算法
作者:張紹勳著
出版社:旗標出版股份有限公司
謝
謝
觀
Q&A時間
賞
以下為超連結圖片
10
10
20
15
15 25
20
25
35
返回上頁
35
10
10
20
30
20
25
15 25
35 45
返回上頁
30
35 25
35
13
8
1
17
11
15
6
25
22
返回上頁
27
D
C
B
A
返回上頁