紅黑樹的管理

2021-05-12 20:00:46 字數 2121 閱讀 7771

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.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...