紅黑樹的實現小結

紅黑樹是一棵自平衡二叉查找樹
雖然很複雜但是效率很高,可以在O(log n)時間內做查找插入和刪除
它的統計性能要比AVL樹要好。
共有五點性質
根節點必須是黑色的
葉子節點和空節點都是黑色的
從任意 節點到葉子節點的所有路徑上黑色節點的個數都是相同的。
紅色的父親它的孩子必須是黑色
只有紅黑兩種顏色
根到葉子的最長路徑不可能是最短路徑的二倍

1.紅兄黑父
首先將紅兄和黑父的顏色互換,然後旋轉父節點(旋轉的方向爲向兄弟方向,如果N爲P的左孩子,那麼就左旋轉P,如果是右孩子就右旋轉P)旋轉後根據N選擇進入下面的情況進行處理

2.黑兄雙黑侄黑父
將黑兄的顏色變成紅色,然後調整父節點P(N=P,continue循環)

3.黑兄雙黑侄紅父
紅父變成黑父,黑兄變成紅兄 ,調整結束。

4.黑兄近紅侄
黑兄變成紅兄,近紅侄變成黑侄,然後旋轉兄弟節點B(旋轉方向爲朝着近紅侄的方向,旋轉結束後使得侄子變成兄弟,兄弟成爲侄子,如果S爲B的左孩子那麼就右旋轉,如果S爲B的右孩子,那麼左旋轉),這時轉到遠紅侄的情況

5.黑兄遠紅侄
兄弟顏色變成父親的顏色,父親的顏色變成黑色,將遠紅侄變成黑色(如果N爲P的左孩子,那麼將右侄子S變成黑色,否則左S變成黑色)然後旋轉父節點(旋轉的方向是朝向兄弟節點,如果N爲P的左孩子,那麼就左旋轉P,如果是右孩子那麼就右旋轉P),調整結束。

紅黑樹的插入調整(N爲當前刪除的節點,P爲父節點 U爲叔叔節點 S爲侄子節點)當父節點的顏色爲紅色的才進行調整。
根據父節點的兄弟節點也就是U叔叔節點的顏色進行分情況調整,
1.U爲紅色
將祖父節點的顏色變成紅色,叔父節點和父節點都變成黑色,然後調整祖父節點。

2.U爲黑色折線型
如果祖父,父,N構成的是折線形的結構,那麼就旋轉父節點(旋轉方向是向N的方向,最終N爲P父,如果N爲右孩子那麼就左旋,如果N爲左孩子,那麼就右旋)然後將N=P,也就是當前節點變成原來的父節點,然後就進入到了下面的情況。

3.U爲黑色直線型
父節點變成黑色,祖父節點變成紅色,然後旋轉祖父節點(如果是左邊的一條直線那麼就右旋轉,右邊的一條直線就是左旋轉)調整結束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章