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 返回上頁