紅黑樹的理解

2021-10-08 08:39:44 字數 1967 閱讀 4892

紅黑樹
1.紅黑樹的性質

2.紅黑樹的新增操作

3.紅黑樹的刪除操作

1 紅黑樹的性質

1.1 根節點必須為黑色

1.2 任意非葉子節點到葉子結點的黑色節點數相同

1.3 葉子節點(nil即空節點)都是黑色

1.4 節點顏色非紅即黑

1.5 相連兩個節點的顏色不能為紅色

插入題外知識點

1.前驅結點

2.後繼結點

一般在刪除操作中當刪除節點有後繼節點時,將後繼結點的值寫入刪除節點中,然後刪除後繼結點

2 紅黑數的新增操作

2.1 新增的節點顏色是紅色–>因為當新增節點為黑色時,必定會導致紅黑樹的不平衡(除開該節點是根節點的情況)(參考紅黑數性質1.2),但是如果新增節點為紅色,只要新增節點的父節點為黑色,就不需要進行任何操作(排除是根節點的情況)就能達到平衡,只有父節點為紅色時才需要操作

2.2節點插入紅黑數中會出現以下四種情況(以下簡稱child代表新增進入的節點****,parent代表新增節點的父節點**gp代表parent的父節點,uncle代表parent的兄弟節點)

如圖所示(僅僅表示關係)

需要理解的兩點結論:
1.由於只有在插入時只有紅紅會違反相連兩個節點的顏色不能為紅色因此可以分析出gp一定為黑色,但是uncle節點可以為紅色或者黑色2.由於二叉樹左右對稱,因此邏輯分析一邊另一邊取反就好

2.2.1 child為紅色parent為紅色且uncle

說明:此種情況為新增節點第一次插入時的情況,此種情況變化後會延伸出下面出現的幾種情況

這兩種情況處理方式一樣需要將parent,uncle變成黑色****,gp需要變成紅色(gp變成紅色,主要是為了黑色節點的平衡)

因為gp****在未變色之前為黑色,因此gp的父節點可以為黑色或者紅色,所以需要向上追溯,直至遇到黑色節點或者到達根節點

2.2.2 child為紅色,parent紅色,uncle為黑色

說明:此種情況出現是因為第一種情況向上追朔時產生的

這張情況需要進行右旋操作,此時能保證黑色節點的平衡以及不會違反紅紅相連的情況

2.2.3 child為紅色且為parent的右節點,parent為紅色,uncle為黑色

說明:此種情況出現是因為第一種情況向上追朔時產生的

這種情況先將parent以child為軸心左旋轉,然後在按照情況2.2.2 進行處理

理解紅黑樹

在樹裡面的節點不是紅色的就是黑色的,沒有其他顏色,要不怎麼叫紅黑樹呢,是吧。性質二 根節點是黑色 根節點總是黑色的。它不能為紅。性質三 每個葉節點 nil或空節點 是黑色 這個可能有點理解困難,可以看圖 這個就是乙個紅黑樹,nil節點是個空節點,並且是黑色的。性質四 每個紅色節點的兩個子節點都是黑色...

紅黑樹理解

近期讀 linux核心設計與實現 第三版 清晰中文版 發現linux低層資料結構很多都用到紅黑樹,查查資料說說自己的理解。紅黑樹 二叉樹 高度限制 二叉樹 確定了它的查詢非常快。高度限制 這個是取普通二叉樹和平衡二叉樹之間。普通二叉樹,只管插入不做調整,可能會出現單鏈很長。平衡二叉樹,所有的鏈高度相...

紅黑樹的理解

一 紅黑樹要達到自平衡的二叉樹,必須滿足下面5個性質 1 每個節點要麼是黑色,要麼是紅色。2 根節點是黑色。3 每個紅色節點的兩個子節點一定是黑色。4 任意乙個節點到每個子節點的路徑都包含相同梳理的黑節點。所以乙個節點存在乙個黑子節點,那肯定兩個子節點都是黑色 5 每次新增的新節點,都是紅色。二 紅...