1. 程式人生 > >資料結構之紅黑樹個人筆記

資料結構之紅黑樹個人筆記

   作者:Sky Wang    於 2013-08-08                          

     概述:R-B Tree,又稱為“紅黑樹”。本文參考了《演算法導論》中紅黑樹相關知識,加之自己的理解,然後以圖文的形式對紅黑樹進行說明。本文的主要內容包括:紅黑樹的特性,紅黑樹的時間複雜度和它的證明,紅黑樹的左旋、右旋、插入、刪除等操作。

     請尊重版權,轉載註明出處

http://www.cnblogs.com/skywang12345/p/3245399.html

 

根據被插入節點的父節點的情況,可以將"當節點z被著色為紅色節點,並插入二叉樹"劃分為三種情況來處理。
① 情況說明:被插入的節點是根節點。
    處理方法:直接把此節點塗為黑色。
② 情況說明:被插入的節點的父節點是黑色。
    處理方法:什麼也不需要做。節點被插入後,仍然是紅黑樹。
③ 情況說明:被插入的節點的父節點是紅色。
    處理方法:那麼,該情況與紅黑樹的“特性(5)”相沖突。這種情況下,被插入節點是一定存在非空祖父節點的;進一步的講,被插入節點也一定存在叔叔節點(即使叔叔節點為空,我們也視之為存在,空節點本身就是黑色節點)。理解這點之後,我們依據"叔叔節點的情況",將這種情況進一步劃分為3種情況(Case)。

1. (Case 1)叔叔是紅色

1.2 處理策略
(01) 將“父節點”設為黑色。
(02) 將“叔叔節點”設為黑色。
(03) 將“祖父節點”設為“紅色”。
(04) 將“祖父節點”設為“當前節點”(紅色節點);即,之後繼續對“當前節點”進行操作。

2. (Case 2)叔叔是黑色,且當前節點是右孩子

2.1 現象說明
當前節點(即,被插入節點)的父節點是紅色,叔叔節點是黑色,且當前節點是其父節點的右孩子

2.2 處理策略
(01) 將“父節點”作為“新的當前節點”。
(02) 以“新的當前節點”為支點進行左旋。

3. (Case 3)叔叔是黑色,且當前節點是左孩子

3.1 現象說明
當前節點(即,被插入節點)的父節點是紅色,叔叔節點是黑色,且當前節點是其父節點的左孩子

3.2 處理策略
(01) 將“父節點”設為“黑色”。
(02) 將“祖父節點”設為“紅色”。
(03) 以“祖父節點”為支點進行右旋。