刪除乙個節點相同有可能改變樹的平衡性,並且,刪除所造成的不平衡性比插入所造成的平衡性的修正更加複雜。化繁為簡是演算法分析中乙個經常使用的方法。以下我們將欲刪除節點分為三大類:欲刪除節點為葉子節點、欲刪除節點僅僅有乙個子節點和欲刪除有兩個子節點。
而欲刪除節點有兩種可能的顏色,也須要分別對待。
為簡化討論,我們以欲刪除節點在左側的情況為例進行修正,假設欲刪除節點在右側,進行映象地修正操作就可以。
僅僅有下圖所看到的兩種情況,帶黃色邊框的為欲刪除的節點:
將該節點直接刪除就可以。所在子樹的黑色高度不變,不會影響紅黑樹的性質。
為什麼說黑色節點必存在兄弟節點呢?假設乙個黑色節點不存在兄弟節點。不管父節點是紅是黑,則從該節點到父節點會比空子節點到父節點少乙個黑色高度,所以這樣的情況是不存在的。
以下就可能存在的情況逐個分析:
與兄弟節點是否有左子節點相關,分為兩種情況。
(1)假設兄弟節點沒有左子節點,修正策略例如以下:
上圖中,虛線代表其連線的子節點可在可不在,對修正過程無影響。
(2) 假設兄弟節點有左子節點,修正策略例如以下:
1.2.2.1 兄弟節點為紅色,則它必存在兩個黑色子節點。
與左侄節點是否有子節點相關,分為三種情況。
(1)假設左侄節點有右子節點。修正策略例如以下:
(2)假設左侄節點沒有右子節點。僅僅有左子節點,修正策略例如以下:
這時。左侄節點就有了右子節點,再進行與上一種情況一樣的修正。
(3)假設左侄節點為葉子節點。修正策略例如以下:
1.2.2.2兄弟節點為黑色
與兄弟節點是否有子節點相關。分為三種情況。
(1)假設兄弟節點有右子節點,修正策略例如以下:
(2)假設兄弟節點無右子節點,僅僅有左子節點。修正策略例如以下:
(3)假設兄弟節點既無左子節點。也無右子節點,例如以下圖所看到的:
此時。依靠該子樹的自身是無法解決的,由於該子樹的黑色高度為2,假設將帶黃色邊框的節點刪除,不管怎樣變換顏色、旋轉都無法使該子樹恢復黑色高度。
有兩種解決思路:
(1)借助欲刪除節點的祖父節點及祖父節點的子樹來修正。僅僅要祖父節點與祖父節點的還有一顆子樹中含有紅色節點。就能通過顏色變化和旋轉來使。可是,假設祖父節點與祖父節點的還有一顆子樹中的節點全為黑色:
這時,依靠該子樹本身也是無法解決的。還須要借助更上層的節點。層層傳遞。直到根節點。
假設到根節點還是不能解決,就須要採用還有一種思路
(2)減少黑色高度。
但就這顆子樹來說,確實是符合紅黑規則的,可是,子樹的黑色高度減少。會影響到整棵紅黑樹的黑色高度。
能夠看到。變換之後,左子樹的黑色高度為1,而右子樹的黑色高度是2。違背了紅黑規則。
這時候就須要同一時候減少右子樹的黑色高度,並層層向上傳遞。直到根節點。終於使整棵樹的黑色高度減少。
可是,有的右子樹是無法減少黑色高度的。比方:
上圖中的右子樹就無法減少黑色高度。可是這樣的情況下。右子樹必存在紅色節點。能夠通過第一種思路解決。
總之,結合兩種思路,總是是能夠解決「黑三角」這樣的頑固問題的。
紅色節點要麼沒有子節點,要麼有兩個黑色節點,所以該節點不可能為紅色。
假設該節點僅僅有乙個黑色節點,則黑色的子節點到該節點的黑色高度與空子節點到該點的黑色高度不一致。所以子節點僅僅能為紅色。
綜上,僅僅有下圖所看到的的兩種情況會出現。
僅僅須要將紅色子節點塗黑,上移到被刪除的節點位置就可以。
紅黑樹也屬於二叉搜尋樹。所以要先找到欲刪除節點的後繼節點。後繼節點的尋找步驟例如以下:從該點的右子節點開始。假設有左子節點則跳到左子節點,層層向下,直到某個子節點沒有左子節點為止。
實際上就是找到比欲刪除節點的keyword值大的集合中的最小值。這部分內容在二叉搜尋樹中已經介紹過,不再贅述。
第一步,我們要將欲刪除節點與後繼節點中的資料對換。如此一來,節點的刪除操作就轉移到了後繼節點上來了。
上圖中,經過資料交換之後,沒有改變不論什麼節點的顏色,如今要刪除的是帶黃色邊框的紅色節點。前面已經論證,後繼節點肯定是乙個沒有左子節點的節點。即是乙個葉子節點或者僅僅有乙個右子節點的節點,而這兩種情況的刪除我們在之前已經分析過並給出了解決方法。
至此,紅黑樹全部可能出現的刪除情況都已經討論完成。
資料結構之紅黑樹
定義 紅黑樹是一顆二叉查詢樹,樹中結點顏色或為紅色或為黑色,且滿足如下條件 根結點和所有外結點的顏色為黑色 根結點到任意乙個外結點的路徑上沒有連續的兩個紅色結點,若乙個結點是紅色,則其兩個兒子結點都是黑色 根結點到任意外結點的路徑上都有相同數目的黑色結點。1 插入操作 插入操作可以概括為以下幾個步驟...
資料結構 紅黑樹
紅黑樹是二叉排序樹的改進,紅黑樹有幾個特點 1 節點只有2中顏色,紅色和黑色。2 根節點一定是黑色節點。3 紅色節點的子節點一定是黑色節點。4 黑色高度 根節點到每個葉子節點的路徑長度包含相同的黑色節點 相等。規定的插入的節點一定是紅色節點,紅黑樹的插入節點後需要調整的規則,插入節點需要調整的情況有...
資料結構 紅黑樹
一 紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在 電腦科學中用到的一種 資料結構 典型的用途是實現 關聯陣列 可以保證最長路徑不超過最短路徑的2倍,近似平衡。二 性質 性質1.節點是紅色或黑色。性質2.根節點是黑色。性質3 每個葉節點 nil節點,空節點 是黑色的。性質...