紅/黑樹狀結構---刪除

來源:互聯網
上載者:User

還是老樣子,先上性質:

性質1. 節點是紅色或黑色

性質2. 根是黑色

性質3. 所有葉子都是黑色(葉子是NIL節點)

性質4. 如果一個節點是紅的,則它的兩個兒子都是黑的

性質5. 從任一節點到其葉子的所有簡單路徑都包含相同數目的黑色節點。

我們定義:

我們由二叉尋找樹的刪除可知,那個最後被真正刪除的結點一定是一個只有一個孩子結點或一個孩子結點都沒有結點(不懂的可以去尋找二叉尋找的刪除),我們將真正刪除的結點為V,其孩子結點U(可能是哨兵結點,也可能是內結點)會替代V刪除的位置,U的兄弟結點為S,如果所示:

我們先來看一下紅/黑樹狀結構中刪除一個結點會出現什麼情況:

1.如果刪除的結點顏色為紅色,紅/黑樹狀結構的性質不會改變,不用做任何操作

因為你刪除的結點為紅色,不會影響任何一個路徑上的黑高度,不會破壞性質5,同樣不會同一路徑上的兩個連續的紅結點,不會破壞性質4

2、如果刪除的結點為黑色

如果刪除的結點為黑色,經過U路徑黑高度會減1,會破壞性質5,同時,如果U與P(V)同樣都是紅色,那麼也會破壞性質4

下面和們就主要說說怎麼處理第二種情況,也就是刪除結點為黑色,

其中主要的性質還是性質5被破壞,也就是從U結點的路徑上黑結點的個數會減1,我們要做的就是想辦法使左子樹的黑結點的個數加1,(我們假設U是P(U)的左孩子),怎麼樣做才能使左孩子黑結點個數加1,而右孩子黑結點的個數保持不變,並使右孩子不會破壞性持4(存在兩個連續的紅結點)?

分析:

現在我們要做的就是怎麼使上面被刪除的樹滿足紅/黑樹狀結構的性質,有下面幾種情況討論:(由於刪除結點V為紅色不影響,這裡不再討論)

如果我們刪除的結點為黑色,會破壞紅/黑樹狀結構性質,如果上面所講到的,怎麼才能使經過被刪除結點的路徑上的黑高度與刪除之前是平衡的呢?

1.如果U是紅色,或是根結點,可都滿足兩者,此時,我們可直接將U染黑,不再做任何操作

如果U為紅色,無論P為何種顏色,將U染黑後些經過此結點的路徑上黑高度又加1,與刪除前的黑高度相同,滿足性質5,且性質4

2.如果U是黑色,我們將P左移,S就會被移動到P的上方,我們令P為黑色,S為原來P的顏色,這樣在左孩子上就會多了一個黑結點,下面我們要做的就是讓右孩子黑結點的個數沒有減少。我們來分幾種情況來來分析:

2.1、如果S為紅色,當P為紅色的情況下,S上移不會破壞紅/黑樹狀結構性質,但當P黑色的情況下,上移經過L結點路徑上的黑高度會加1,(因為旋轉後L的父親為P,因為原來L父親為紅色的S,後來為黑色的P,所以黑高度會加1)

2.2、如果S為黑色,當P為紅色的情況下,S上移不會破壞紅/黑樹狀結構性質,但當P為黑的情況下,S上移,經過R分支的黑結點高度就會少1,因為黑結點P被移到了下方

所以,僅以S顏色並不能確定下來固定的方法,所以,我們還要看S的孩子結點,因為在移動後L會作為P結點的孩子結點,而P為黑色結點,所以我們為減少調整L,所以,討論在S為黑色的情況下,因為S左孩子L移動到P孩子後不會破壞樹的結構,所以L顏色不會破壞紅/黑樹狀結構的性質,那下面就讓我們討論一下右孩子的情況,無論R為什麼色,我們的目的是要讓右邊的黑高度保持和原來不變,但S為黑色,移動到上面可能變為紅色,如果不變為紅色,右孩子黑高度不變,但如果變為紅色的話,右子樹黑高度就會減1

2.2.1、如果 右孩子R為黑色,S在上移後變為紅色,右分支黑高度會減1,而不能達到與原來平衡的目的

2.2.1、如果右孩子R為紅色,S在上移後變為紅色,右分支黑高度會減1,我們可以將為紅色的右分支R結點改為黑色,這樣右分支黑高度就與原來保持不變了

上面講述的情況也就是下面的幾種詳細情況的一個說明,下面的四種情況是演算法導論上列出的四種情況,只是知道了步驟,可不知道為什麼,這裡記錄一下,也是說明導論上的前三種情況都是在向第四種情況的轉換,因為只有轉換到第四種情況,才能設定將紅/黑樹狀結構的情況一次性滿足的設定成功


這裡再說一句,刪除過種中,主要維護的就是性質5,因為它會破壞了整個樹的結構,也是最麻煩的一個,它會使某個分支上的黑高度減小,我們解決的總體思路就是左旋其父親結點,為其路徑上增加一個黑結點,並使其右邊分支黑高度不變,這樣就使又回複了原來的性質,只是條件比較苛刻

還有像演算法導論上的什麼雙黑結點,紅黑結點,都是一種策略,並不存在這種結點,大家看的時候不要被其誤解

像具體的四種情況的討論,這裡就不再說了,有好多講的都要比我說的好,這裡也只是從另一個方面記錄一下,僅個人理解。。。

參考好多資料,謝謝!

http://dongxicheng.org/structure/red-black-tree/

http://wangdei.iteye.com/blog/236157

http://blog.csdn.net/v_JULY_v/article/details/6105630

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.