紅黑樹刪除操作

2021-08-03 19:49:44 字數 3720 閱讀 2888

紅黑樹刪除操作:

紅黑樹要刪除某個key值時,首先還是要查詢該key值在樹中的位置,查詢方法和搜尋二叉樹方法相同.

要刪除的結點分為兩種情況:

1.有左右兩個孩子都存在.兩個孩子都存在時,在該節點的右子樹中尋找其直接後繼,找到後用其值替換要刪除節點的值,然後問題轉化為刪除該節點的直接後繼,直接後繼是有乙個右孩子或者沒有孩子節點.

2.只有乙個孩子或者沒有子孩子.

以上兩種均歸納為最多只有乙個孩子節點的節點,只要將其僅有的乙個孩子節點及其子樹或者null直接提上來就行,刪除的節點如果是紅色則不會影響樹的黑高,如果是黑色節點,則會影響樹的黑高,樹的平衡必然被打破,所以要進行調整.

現在將前面所說的提上來的節點(也就是刪除節點的孩子節點,即刪除了那個節點以後那個位置上的節點)以下稱為x,  x 的兄弟節點記為w,如果x為紅色節點則直接將紅色節點更改為黑色,則又重新平衡,調整完成,如果x為黑色節點(即null)這種情況比較複雜 ,分為4種情況處理:

1.如果x的兄弟節點w是紅色的,則x和w的父親節點p一定是黑色的而且w的兩個孩子也是黑色的(非null)則只要將p和w做一次左旋轉並改變w的顏色為紅色即平衡.

2.x的兄弟節點w是黑色(非null)且兩個子節點是黑色(null),則將w變為紅色,這樣p節點的子樹平衡.將x = x->parent,即上移,又回到了1.2.3.4的情況(以new 的x的子樹還是少了乙個黑色節點)同樣的去檢查,如果x為紅色則將變為黑色調整完成,如果是黑色,則繼續去檢查x的new的兄弟節點是什麼顏色.....

3.w的左孩子節點是紅色,右節點是黑色(null),w和x的父親節點p可紅可黑,對w做一次左旋轉,並調整顏色,則成為4的情況.

4.w的右孩子是紅色,左邊孩子是黑色(null).將x的父親節點做一次左旋轉,然後更改顏色,x的父親p 為黑色,w為紅色,則調整完成.

紅黑樹 3 刪除操作

在本系列的前面兩篇文章中。已經介紹了紅黑樹以及其插入操作。紅黑樹 2 插入操作 類似於插入操作。紅黑樹進行刪除節點時,也使用又一次著色以及旋轉這兩種方式。來維護它的屬性。在插入操作中,我們主要是依靠檢測叔節點的顏色來決定哪種場景。在刪除操作中,我們使用檢測兄弟的顏色,來決定是哪種場景。在插入操作中,...

紅黑樹的刪除操作

原文 可能出現的情形討論 刪除紅黑樹中乙個結點,刪除的結點是其子結點狀態和顏色的組合。子結點的狀態有三種 無子結點 只有乙個子結點 有兩個子結點。顏色有紅色和黑色兩種。所以共會有6種組合。組合1 被刪結點無子結點,且被刪結點為紅色 此時直接將結點刪除即可,不破壞任何紅黑樹的性質。組合2 被刪結點無子...

紅黑樹 刪除

分類 演算法筆記 2011 09 07 21 49 318人閱讀收藏 舉報 一 紅黑樹的節點刪除 從紅黑樹上刪除乙個節點,可以先用普通二叉搜尋樹的方法,將節點從紅黑樹上刪除掉,然後再將被破壞的紅黑性質進行恢復。我們回憶一下普通二叉樹的節點刪除方法 z指向需要刪除的節點,y指向實質結構上被刪除的結點,...