看了蠻多種講解,個人感覺這個專欄情況分得比較細,比較適合我這樣頭腦不太靈光的初學者一些。
一步簡化:如果需要刪除的結點有兩個孩子,我們的做法是找到這個結點的中序後繼,將後繼結點中的資料拷貝至待刪除結點,然後刪除後繼結點。而後繼結點必然最多只有乙個子結點,這樣我們就把刪除兩個孩子的結點轉為刪除乙個孩子的結點。
兩種基本情況:
1.刪紅節點:它的父親和兒子一定是黑色的。所以我們可以簡單的用它的黑色兒子替換它
2.被刪除結點是黑色而它的兒子是紅色的時候。我們重繪它的兒子為黑色,則曾經通過它的所有路徑將通過它的黑色兒子,再用這個兒子節點替換原節點。
接著是一些複雜一些的情況:
case1.n是新根。則操作完成
case2.p紅,n,s,r,l均黑(r,l為s兩個子節點)【給n加乙個黑高,r,l的黑高不變】:p,s換色
case3.p隨意,n,l,s黑,r紅【給n加乙個黑高,r,l的黑高不變】:p上左旋,p,s換色,r變black
case4.p隨意,n,l,r黑,l紅【給n加乙個黑高,r,l的黑高不變】:p上左旋,進入情況3
case5.p,n,l,r黑,s紅:p左旋,p,s換色,進入case2/3/4【比較特殊】
case6.p,n,l,s,r全黑:s變紅。把p當作n,上濾。
紅黑樹 刪除
分類 演算法筆記 2011 09 07 21 49 318人閱讀收藏 舉報 一 紅黑樹的節點刪除 從紅黑樹上刪除乙個節點,可以先用普通二叉搜尋樹的方法,將節點從紅黑樹上刪除掉,然後再將被破壞的紅黑性質進行恢復。我們回憶一下普通二叉樹的節點刪除方法 z指向需要刪除的節點,y指向實質結構上被刪除的結點,...
紅黑樹(刪除)
相對於紅黑樹插入操作,刪除操作複雜的多。第一 先看最簡單情況,即刪除紅色節點。刪除紅色節點,不影響紅黑樹平衡性質,如圖 只需要刪除紅色節點,不需要進行調整,因為不影響紅黑樹的性質。黑色節點沒有增多也沒有減少。注意 以下幾種單支情況在平衡的紅黑樹中不可能出現。因為上述的情況,紅黑樹處於不平衡狀態。破壞...
紅黑樹刪除
相對於紅黑樹插入 操作,刪除操作複雜的多。第一 先看最簡單情況,即刪除紅色節點。刪除紅色節點,不影響紅黑樹平衡性質,如圖 只需要刪除紅色節點,不需要進行調整,因為不影響紅黑樹的性質。黑色節點沒有增多也沒有減少。注意 以下幾種單支情況在平衡的紅黑樹中不可能出現。因為上述的情況,紅黑樹處於不平衡狀態。破...