3.2 刪除
4 ** 1
紅黑樹是一種自平衡二叉樹,擁有以下性質:
每個節點非黑即紅
每個葉子為黑
若某節點為紅,其兩子節點均為黑
從任一節點到其葉子的所有路徑都包含相同數量的黑節點
根節點總為黑
當樹被修改( 節點增、刪)時,樹會自動調整以維持上述性質的有效性。 2
3紅黑樹的操作主要是插入資料和刪除資料, 對此引發的可能是某些紅黑樹特質的無效,因此要對樹進行調整,以維持其特徵有效性.
3.1我們新增的總是葉子節點, 根據特徵 2, 我們把新加的葉子節點置紅. 如果父親是黑色,那麼萬事大吉; 否則,會破壞性質 3, 此時就需要進行調整.
注意有四種參與調整的節點::
調整的過程如下:
因為新增的節點總是葉子節點,因此對於特徵4影響的只是一部分樹,所以只要向上回溯調整,直到碰到節點子樹符合特徵( 父親是黑色 )就可以了.
3.1.1
根據特徵2, 把自己調成黑即可, 調整完畢, 終止回溯.
3.1.2
此種情況下, 特徵4依然滿足, 路徑上的黑節點數量不變, 故不需調整, 調整完畢, 終止回溯.
3.1.3
父子節點同為紅,不滿足特徵3, 需要調整, 在處理完 grandfarther 的分支之後, 要從 grandfarther 向上回溯來平衡.
此時, grandfarther 為黑, parent 和 uncle 為紅. 因此, 無需進行旋轉, 只需更改 grandfarther, parent, uncle 的顏色, 就保證了每一條路徑上的黑節點數量不變, 而 grandfarther 置紅, 有可能造成 grandfarther 上一級的父子節點均為紅, 因此繼續回溯.
此種情況下, 又分為兩種情況:
uncle 黑, parent 為左孩子, 自己是右孩子,需要左旋
uncle 黑, parent 為左孩子, 顏色變換,並進行右旋
此情形同 parent 為 grandfarther 的左節點相類似
3.2刪除節點過程:
即是說, 要刪除節點 z, 實際上是先找到替代自己的節點 y, 將 z 的值賦成 y, 刪除節點 y. 若刪除的節點 y 是黑, 路徑上就少了乙個黑色節點, 破環了特徵 4, 此時就需要進行調整了.
中序遍歷的後續節點: 右孩子一直向左走到底部見紅大喜刪除時候的調整還要用到的節點
3.2.1
調整完畢, 為滿足特徵4, 將其置黑彌補刪除節點造成的黑色損失, 回溯結束
3.2.2
3.2.3
case 1
此時, parent 和 brother 的孩子為黑.
我們置 brother 為黑, parent 為紅. 並對 parent 左旋. 這樣 brother 兩個分支的路徑黑節點數量還是同之前一樣.
case 3
3.2.4
case 2
此時, 當前節點, parent, brother, brother 的兩個孩子都是黑.
置 brother 為紅, 將當前節點指標移動到 parent 上.
到這裡, brother 的路徑上也少了乙個黑色的節點, 這樣 parent 的旗下兩條路徑都少了乙個節點. 從 parent 進行向上回溯.
3.2.5
case 3
case 4 .
此時, 當前節點, parent, brother, brother 的右孩子為黑, brother 的左孩子為紅.
brother 左孩子置黑, brother 置紅, 對 brother 右旋.
case 4
3.2.6
case 4
case 3
此時, 當前節點, brother 為黑, parent 為紅. brother 的右孩子為紅.
將 brother 置為 parent 的顏色, parent 置黑, brother 的右孩子置黑, 對 parent 進行左旋. 至此, 當前節點的分支上就多了乙個黑色節點, 調整完畢, 停止回溯.
4待新增
date: 2009-12-13 11:17:32
html generated by org-mode 6.30c in emacs 23
記憶體管理之紅黑樹
紅黑樹是平衡二叉樹的一種,它有很好的性質,樹中的結點都是有序的,而且因為它本身就是平衡的,所以查詢也不會出現非常惡劣的情況,基於二叉樹的操作的時間複雜度是o log n linux核心在管理vm area struct時就是採用了紅黑樹來維護記憶體塊的。先到include linux rbtree....
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...