紅黑樹學習總結 二 之刪除篇

2021-10-07 21:51:14 字數 1197 閱讀 7897

紅黑樹的五條性質:

每個節點非紅即黑

根節點為黑

紅節點的兩個子節點都為黑

每個葉子節點都為黑

對於任一節點而言,其到葉子節點的每一條路徑都包含相同數目的黑節點

說真的在學紅黑樹的時候,看網上寫的部落格真的是一臉懵逼,完全不知道在講什麼東西,身邊的同事也沒有對它比較理解的,以至於我學了整整2天才把紅黑樹刪除的情況搞的**不離十。以下是我的總結,雖然沒有圖,但是如果你跟著我的思路來,邊看邊畫圖,一定可以很快理解。

紅黑樹的刪除一共有(2+9+9)21種情況:我只說左子樹的情況(2+9)11種;

第一步:我們可以通過取當前刪除節點的前驅節點或者後繼節點來對當前節點進行覆蓋,然後刪除前驅或者後繼節點,然後進行平衡處理。(這樣做的好處就是刪除節點最多乙個子節點,為什麼?自己想,或者去看看什麼是後繼/前驅節點)

第二步:分情況對樹進行平衡處理(這裡取後繼節點):

1、刪除節點為紅色節點,直接刪除。

2、刪除節點為黑色節點,並且有子節點(存在字節點只有一種情況,就是有右節點,

並且為紅色),子節點覆蓋刪除節點,塗為黑色,刪除子節點。

3、一共分為9種情況:

父節點為紅色,兄弟節點為黑色,侄子節點為空,直接刪除,交換父親節點與兄弟節點的顏色。

父節點為紅色,兄弟節點為黑色,右侄子節點為紅色,左侄子節點為空,直接刪除,對父節點進行左旋。

父節點為紅色,兄弟節點為黑色,右侄子節點為空,左侄子節點為紅色,直接刪除,對兄弟節點進行右旋,交換顏色,如下圖,然後對父節點進行左旋。

父節點為紅色,兄弟節點為黑色,右侄子節點為紅色,左侄子節點為紅色,直接刪除,對父節點進行左旋,交換父節點與兩個子節點的顏色。

父節點為黑色,兄弟節點為紅色,右侄子節點為黑色,左侄子節點為黑色,直接刪除,對父節點進行左旋,交換旋轉後父節點與其左節點的顏色

父節點為黑色,兄弟節點為黑色,右侄子節點為紅色,左侄子節點為紅色,直接刪除,對父節點進行左旋,並將旋轉後的兄弟節點塗為黑色

父節點為黑色,兄弟節點為黑色,右侄子節點為紅色,左侄子節點為空 ,直接刪除,對父節點進行左旋,並將旋轉後的兄弟節點塗為黑色。

父節點為黑色,兄弟節點為黑色,右侄子節點為空,左侄子節點為紅色, 直接刪除,對兄弟節點進行右旋,並將旋轉後的兄弟節點塗為黑色,對父親節點進行左旋。

父節點為黑色,兄弟節點為黑色,無侄子節點,直接刪除,把兄弟節點塗為紅色,然後把父節點設為當前節點,做下一步處理。

紅黑樹刪除 自己總結篇

從紅黑樹上刪除乙個節點,可以先用普通二叉搜尋樹的方法,將節點從紅黑樹上刪除掉,然後再將被破壞的紅黑性質進行恢復。首先我們來看看 普通二叉樹的節點刪除方法 我們回憶一下普通二叉樹的節點刪除方法 z指向需要刪除的節點,y指向實質結構上被刪除的結點,如果z節點只有乙個子節點或沒有子節點,那麼y就是指向z指...

紅黑樹學習總結 刪除

看了蠻多種講解,個人感覺這個專欄情況分得比較細,比較適合我這樣頭腦不太靈光的初學者一些。一步簡化 如果需要刪除的結點有兩個孩子,我們的做法是找到這個結點的中序後繼,將後繼結點中的資料拷貝至待刪除結點,然後刪除後繼結點。而後繼結點必然最多只有乙個子結點,這樣我們就把刪除兩個孩子的結點轉為刪除乙個孩子的...

紅黑樹(二)刪除

一 紅黑樹的節點刪除 從紅黑樹上刪除乙個節點,可以先用普通二叉搜尋樹的方法,將節點從紅黑樹上刪除掉,然後再將被破壞的紅黑性質進行恢復。我們回憶一下普通二叉樹的節點刪除方法 z指向需要刪除的節點,y指向實質結構上被刪除的結點,如果z節點只有乙個子節點或沒有子節點,那麼y就是指向z指向的節點。如果z節點...