1. 程式人生 > >紅黑樹的刪除

紅黑樹的刪除

TP ID 由於 mage ima .com 17. 過程 有一個

紅黑樹的刪除共有12種情況,

設要刪除的節點為Z:

1.Z為根 且沒有孩子 直接刪除,將根賦空

2.Z為根 有一個紅孩子(由於第4條性質一定為紅孩子) 將孩子顏色->黑,當做新的根,刪除節點

3.Z紅色 直接刪除,判斷Z為父親的左孩子或右孩子 將其賦空 (此節點一定沒有孩子,因為2個孩子的已經處理過,一個紅孩子(兩個紅色節點不能相鄰),一個黑孩子(到終端節點黑節點數相同))

4.Z為黑色 有一個紅孩子 將紅孩子->黑,Z的父與Z的子相連,刪除Z

5.Z為黑色 沒有孩子(由於要刪除的是黑節點,整個過程通俗的理解就是想要借一個黑節點;當侄子為紅節點則可以變為黑節點,然後借來一個黑節點

  5.1 兄弟為紅(初始狀態)

    兄是父右,兄->黑,父->紅 ,以父為支點左旋 更新兄

      技術分享圖片技術分享圖片技術分享圖片

    

      兄是父左,兄->黑,父->紅,以父為支點右旋,更新兄

  5.2兄弟為黑(初始狀態或調整狀態)

    5.2.1左侄黑,右侄黑

      5.2.1.1父黑: 兄->紅,以父親為當前節點向上調整 ,更新兄 (由於少了一個黑節點,則向上借黑節點)

        初始狀態:

             技術分享圖片技術分享圖片技術分享圖片

        調整狀態:

           技術分享圖片技術分享圖片技術分享圖片

      5.2.1.2父紅:兄->紅,父->黑,結束

        初始狀態:

          技術分享圖片技術分享圖片技術分享圖片刪除Z即可

        調整中:

          技術分享圖片技術分享圖片技術分享圖片

    5.2.2左侄子紅,右侄子黑

      5.2.2.1兄為父右:左侄子->黑,兄->紅,以兄弟為支點右旋 ,更新兄

        初始狀態:

          技術分享圖片技術分享圖片技術分享圖片

        調整中:

          技術分享圖片技術分享圖片技術分享圖片

      5.2.2.2兄為父右:兄弟->父親的顏色,父->黑,左侄->黑,以父親為節點右旋 結束

    5.2.3右侄紅(右侄子紅,左侄子黑;或者右侄子紅)

      5.2.3.1兄為父右:兄弟->父親的顏色,父->黑,右侄->黑,以父親為支點左旋 結束

        初始狀態:

         技術分享圖片技術分享圖片技術分享圖片刪除Z即可

        調整中:

         技術分享圖片技術分享圖片技術分享圖片

      5.2.3.2兄為父左:右侄->黑,兄->紅,以兄弟為支點右旋 ,更新兄弟

      通過上圖,可以看出,5.2.2.1狀態的下一個狀態是5.2.3.1

                5.2.3.2狀態點的下一個狀態是5.2.2.2

    這篇博客是有史以來寫的最認真的一個了,希望下次看的時候一下就能看懂,也希望能對看到這篇博客的人有一些幫助~

紅黑樹的刪除