程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#與數據結構--樹論--紅黑樹(Red Black Tree)(上)(5)

C#與數據結構--樹論--紅黑樹(Red Black Tree)(上)(5)

編輯:關於C語言

3、雙黑

當舊點和新點都為黑色時(新點為空結點時,亦屬於這種情況),情況比較復雜,需要根據舊點兄弟結點的顏色來決定進行什麼樣的操作。我們使用“兄”來表示舊點的兄弟結點。這裡可分為紅兄和黑兄兩種情況:

3.1 紅兄

由於兄弟結點為紅色,所以父結點必定為黑色,而舊點被刪除後,新點取代了它的位置。下圖演示了兩種可能的情況:

紅兄的情況需要進行RR或LL型旋轉,然後將父結點染成紅色,兄結點染成黑色。然後重新以新點為判定點進行平衡操作。我們可以觀察到,旋轉操作完成後,判定點沒有向上回溯,而是降低了一層,此時變成了黑兄的情況。

3.2 黑兄

黑兄的情況最為復雜,需要根據黑兄孩子結點(這裡用“侄”表示)和父親結點的顏色來決定做什麼樣的操作。

3.2.1 黑兄二黑侄紅父

如圖14所示,這種情況比較簡單,只需將父結點變為黑色,兄結點變為黑色,新結點變為黑色即可,刪除操作到此結束。

3.2.2黑兄二黑侄黑父

如圖15所示,此時將父結點染成新結點的顏色,新結點染成黑色,兄結點染成黑色即可。當新結點為紅色時,父結點被染成紅色,此時需要以父結點為判定點繼續向上進行平衡操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved