最近看了些關于紅黑二叉樹的博客,有一些自己的見解。
紅黑二叉樹是一種特殊的平衡二叉樹,擁有平衡二叉樹的所有特征,這里就不再重復。
紅黑二叉樹的規則:
1、每個節點都必須有葉子節點(葉子節點沒有任何數據);
2、根節點和葉子節點必須是黑色;
3,紅節點的父節點必須是黑色;
4、從根節點到任何葉子節點,他們的黑色節點的數目必須相同;
規則解釋:
每個節點,不管有沒有子節點,都必須有兩個葉子節點,如果有子節點,則替換掉相應的葉子節點。
2/3/4點:由于任何分支到根節點的黑色節點數目必須相同,這就保證了各個分支之間長度相差<=1,這就是平衡二叉樹的要求。
如果有插入操作,那么為了保證分支黑色節點數目相同,插入的數據一定是紅節點,但是插入的節點的父節點卻不一定是黑色節點,這個問題下面討論。
紅黑二叉樹的操作:
左旋、右旋、重新著色。
左旋、右旋:當子二叉樹不平衡時,如果左邊的分支比右邊的長,就進行右旋。顧名思義,向右旋轉,具體操作是,讓子根節點a的左子節點b成為子根節點,然后b的右子節點成為a的左子節點,這樣就達到的右旋,左旋與右旋相似。
重新著色:左旋、右旋操作后要進行重新著色,從根節點開始著色,按照黑紅黑的順序著色,(如果存在末端節點一邊有子節點,一邊是葉子節點,則這個節點一定是黑色;如果所有末端節點都沒有子節點,則這一級節點全都是黑色,不需要遵循紅黑順序)著色完成后,計算各個分支的黑色節點數目,如果數目相同,則二叉樹平衡;否則對不平衡的子二叉樹進行左旋、右旋操作,直到二叉樹平衡。
增加:增加的節點一定是紅色,以保持黑色節點數目相同。增加節點的父節點如果紅色,代表這個子二叉樹不平衡,按需要左旋或右旋,操作完成后重新著色,計算黑色節點數目,如不平衡,再調整。
新聞熱點
疑難解答