1. 程式人生 > >平衡樹——紅黑樹

平衡樹——紅黑樹

平衡樹:左右子樹的樹的高度相差不超過1。

紅黑書使得時間複雜度大大降低,從O(N)到O(logN)。

紅黑規則

1、每一個節點不是紅色就是黑色

2、根點總是黑色

3、如果節點是紅色,則它的子節點必須是黑色(反之不一定為真)

4、從根到葉節點或空子節點的每條路徑,必須包含相同的黑色節點。


使成為紅黑樹的操作(滿足紅黑規則就一定是平衡樹)

主要操作

一、顏色變換

規則:每當查詢例程(插入都回要查詢)遇到一個黑節點的兩個節點都是紅節點時,就要進行顏色變換,子節點變為黑色,父節點變為紅色(根節點特殊,只能為黑色)

二、插入節點之後的旋轉

分為三種情況:P是父節點,X是插入的節點,G是P的父節點


1、第一種情況不會引起任何不平衡,所以直接插入就可以

2、第二種情況操作如下

 

圖示:

3、第三種情況


圖示:


三、在下行途中的旋轉

在查詢的下行途中,可能會出現紅節點的子節點也是紅節點,該子節點違背了紅黑規則,以該節點是內側節點還是外側節點分類


左圖是(X)外側節點情況,右圖是內側節點情況

1、X為外側節點,操作如下


圖示:


2、X為內側節點,操作如下


圖示:


總結:在插入過程中,必定先查詢,可能是先遇到在下行途中的旋轉,再是插入之後的旋轉,而是否需要顏色變換可以多次驗證,在旋轉之後。