平衡樹——紅黑樹
阿新 • • 發佈:2018-12-27
平衡樹:左右子樹的樹的高度相差不超過1。
紅黑書使得時間複雜度大大降低,從O(N)到O(logN)。
紅黑規則
1、每一個節點不是紅色就是黑色
2、根點總是黑色
3、如果節點是紅色,則它的子節點必須是黑色(反之不一定為真)
4、從根到葉節點或空子節點的每條路徑,必須包含相同的黑色節點。
使成為紅黑樹的操作(滿足紅黑規則就一定是平衡樹)
主要操作
一、顏色變換
規則:每當查詢例程(插入都回要查詢)遇到一個黑節點的兩個節點都是紅節點時,就要進行顏色變換,子節點變為黑色,父節點變為紅色(根節點特殊,只能為黑色)
二、插入節點之後的旋轉
分為三種情況:P是父節點,X是插入的節點,G是P的父節點
1、第一種情況不會引起任何不平衡,所以直接插入就可以
2、第二種情況操作如下
圖示:
3、第三種情況
圖示:
三、在下行途中的旋轉
在查詢的下行途中,可能會出現紅節點的子節點也是紅節點,該子節點違背了紅黑規則,以該節點是內側節點還是外側節點分類
左圖是(X)外側節點情況,右圖是內側節點情況
1、X為外側節點,操作如下
圖示:
2、X為內側節點,操作如下
圖示:
總結:在插入過程中,必定先查詢,可能是先遇到在下行途中的旋轉,再是插入之後的旋轉,而是否需要顏色變換可以多次驗證,在旋轉之後。