紅黑樹的刪除操作較於插入操作,情況更為複雜:
考慮到紅黑節點的差異性,我們在此通過紅黑節點來考慮這個問題,即僅僅通過要刪除的節點是紅節點,還是黑節點來討論不同的情況:
1 刪除的紅節點為葉子結點(此處為不考慮空葉子結點的模型)
假如上圖所示節點,需要刪除:25,或者 350 ,我們來看看結果:
上圖結果表明:如果待刪除的紅色節點為葉子結點(再次說明這裡僅僅是不考慮空葉子節點的模型),則直接進行刪除即可。
2 刪除的紅色節點不是葉子節點,如圖中的420. 我們分析一下:如果刪除的紅色節點不是葉子節點,那麼根據紅黑樹的性質,待刪除節點的兩個兒子節點均為黑色節點,而且它的父親節點也為黑色節點。如果我們要 刪除的節點是420。
刪除節點420之後,變為:
可見,如果刪除非葉子節點的紅色節點,該節點的值由其前驅節點代替,即其左子樹的最右端的節點代替。如果替代後,樹的平衡性沒有被破壞,則該節點為紅色。如果樹的平衡性遭到破壞,需要對樹的結構進行調整
RB tree性質理解
每個節點的顏色非紅即黑。根節點的顏色必定為黑。每個葉子節點是黑色的 指的是nil節點 如果節點的顏色為紅,其左右子節點的顏色必為黑。任意節點到null 尾節點 的任意路徑上包含的黑色節點數量必須一致。根據以上規則,可以得出以下要求 為了能達到以上的要求,需要對變化後的紅黑樹進行調整。調整的手段主要有...
對RBTree的總結
紅黑樹是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是red或black。通過對任何一條從根到葉子簡單路徑上的顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡。紅黑樹是滿足下面紅黑性質的二叉搜尋樹 1.每個節點,不是紅色就是黑色的 2.根節點是黑色的 3.如...
STL原始碼剖析 容器 RB tree
rb tree,全稱是red black tree,又稱為 紅黑樹 紅黑樹本質上是一種二叉查詢樹,但它在二叉查詢樹的基礎上額外新增了乙個標記 顏色 同時具有一定的規則。這些規則使紅黑樹保證了一種平衡,插入 刪除 查詢的最壞時間複雜度都為o logn 每個節點不是紅色就是黑色 根結點永遠都是黑色 所有...