紅黑樹的特性


紅黑樹的特性:
(1)每個節點或者是黑色,或者是紅色。
(2)根節點是黑色。
(3)每個葉子節點(NIL)是黑色。 [注意:這里葉子節點,是指為空(NIL或NULL)的葉子節點!]
(4)如果一個節點是紅色的,則它的子節點必須是黑色的。
(5)從一個節點到該節點的子孫節點的所有路徑上包含相同數目的黑節點。[這里指到葉子節點的路徑]

 

當新添加一個節點到樹中后,將其顏色置為red,遵循以下原則對整個樹進行調整:

1、  當插入的節點的父節點為null,則將該節點顏色置為black。

2、  當插入節點的父節點顏色為black,不需要調整。

3、  當插入節點的父節點為red,其叔父節點亦為紅色,則將其父親節點和叔父節點置為black,同時將祖父節點置為red,將祖父節點設置為當前新增節點,重新按照從規則1開始判斷。

4、  但插入節點的父親節點為red,其叔父節點為black或null,則需要分多鍾情況考慮。

a)         新增節點為父親節點右孩子同時父親節點是祖父節點的左孩子,則進行左旋,將父節點置為新節點,重新按照規則1進行判斷;

b)         新增節點為父親節點左孩子,同時父親節點是租戶節點的右孩子,則進行右旋,將父節點置為新節點,重新按照規則1進行判斷;

5、  不滿足上述所有條件,將父節點置為black,同時,將祖父節點置為red,進行以下兩種情況判斷。

a)         如果新增節點是父親節點的左孩子,同時,父親節點是祖父孩子的左孩子,則對祖父節點進行右旋

b)         其他情況,對祖父節點左旋。

通過以下序列來實現:35、75、65、56、78、29、41、37、38

第一步,首先加入35,只有根節點,按照規則1,將其顏色設置為black。

 

 

第二步,添加75節點,由於75節點的值大於當前根節點的值35,因此需要添加到根節點右側,根據規則2,其父親節點為black,不需要調整。

 

 

第三步,添加65節點,由於65大於35且小於75,因此,需要添加在75節點的左節點。根據規則4(a)規則進行調整,對父親節點進行右旋,之后按照5(b),進行調整后,滿足條件不需要再次調整。得到如下結果。

                                      

 

              

第三步,將56添加到現有的結果中,需要對先按照規則3進行調整,之后按照規則1調整,得到如下結果。

                                

 

 

 

第四步,將78添加到現有的樹中,為75的右節點,滿足條件2不需要進行調整。

 

 

第五步,將29添加的樹中。滿足條件2不需要進行調整。

 

 

第六步。將41添加的樹中,按照規則3對其進行顏色調整,之后在按照規則2進行調整,滿足條件。

                   

 

 

第七步,將37添加到樹中,需要進行5(b)調整。

               

 

 

第八步,將38添加到樹中,按照條件3進行調整,將37和56置black,同時,將41置為red,將41節點置為當前節點重新判斷;之后按照4(a)進行調整,將父節點35置為新節點,繼續判斷;按照5(a)進行最后調整,滿足條件。

                                                                             

 

 

 

 

紅黑樹在線生成鏈接:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM