紅黑樹 學習

2021-10-07 09:48:54 字數 2210 閱讀 1957

紅黑樹筆記

紅黑樹是一顆二叉平衡樹,查詢不會破壞平衡性,所以和二叉平衡術查詢方式一致。

從根節點開始查詢,為空就返回null,為當前值就返回,否則繼續向下查詢。

如果當前節點的key為要查詢的節點的key,那麼直接返回當前值。

如果當前節點的key大於要查詢的節點的key,那麼繼續向當前節點的左子節點查詢。

如果當前節點的key小於要查詢的節點的key,那麼繼續向當前節點的右子節點查詢。

紅黑樹是一顆二叉平衡樹,查詢不會破壞平衡性,所以和二叉平衡術查詢方式一致。

從根節點開始查詢,為空就返回null,為當前值就返回,否則繼續向下查詢。

如果當前節點的key為要查詢的節點的key,那麼直接返回當前值。

如果當前節點的key大於要查詢的節點的key,那麼繼續向當前節點的左子節點查詢。

如果當前節點的key小於要查詢的節點的key,那麼繼續向當前節點的右子節點查詢。

插入的自平衡

插入主要指標指向插入結點,通過4. 紅黑樹的自平衡將紅黑樹達到的平衡即可

左旋條件:當前節點的父節點是紅色 & 當前節點的叔叔節點是黑色或者不存在 & 當前結點是其父節點的右子結點。

步驟:將父節點左旋

將指標指向父結點

右旋條件:當前節點的父節點是紅色 & 當前節點的叔叔節點是黑色或者不存在 & 當前結點是其父節點的左子結點。

步驟:將父節點變為黑色

將祖父結點變為紅色

將祖父結點右旋

將指標指向祖父結點

變色條件:當前節點的父節點是紅色並且當前節點的叔叔節點也是紅色。

步驟:當前結點是根結點直接變為黑色

當前結點不是根結點

將父節點與叔叔節點變為黑色

將祖父結點變為紅色

將指標指向祖父結點

查詢刪除位置

從根節點開始,如果根節點為空,則刪除在根節點,否則根節點為當前節點。

如果當前節點為null,則返回當前節點的父節點進行插入。

如果當前節點的key等與刪除節點的key,則找到當前節點。

如果當前節點的key大於刪除節點的key,則繼續向當前節點的左子節點繼續查詢。

如果當前節點的key小於刪除節點的key,則繼續向當前節點的右子節點繼續查詢。

刪除節點

1.刪除節點沒有子節點。直接執行自平衡即可

2 刪除節點有子節點

2.1 找到替換節點(注意替換結點為根節點的情況)

2.1.1有兩個子節點。

找到左子樹的最大那個節點或者右邊最小節點。

2.1.2有乙個節點。

這個子節點就是替換節點。

2.2如果刪除節點是黑色,替換後進行自平衡即可。

刪除後的自平衡

1、刪除節點的兄弟節點紅色

1.1刪除節點是左子節點。

刪除節點的父節點變紅、兄弟節點變黑、父節點左旋、轉換成下面任意情況。

1.2刪除節點是右子節點。刪除節 點的父節點變紅、兄弟節點變黑、父節點右旋、轉換成下面任意情況。

2、刪除節點的兄弟節點黑色& (兄弟節點有兩個 黑色節點|不存在黑色節 點)

將兄弟節點設定為紅色,將指標指向刪除節點的父節點。

3、刪除節點的兄弟節點是黑色

3.1兄弟節點右側

3.1.1兄弟節點左子節點紅色& (右子 節點黑色|不存在黑色節點)

刪除節點的兄弟節點與兄弟節點的左子節點交換顏色(兄弟節點設定為紅色,兄弟節點左子節點設定為黑色)、對兄弟節點右旋。之後轉化為3.1.2。

3.1.2兄弟節點左子節點(任意色|不存在) & 右子節點紅色。

刪除節點的兄弟節點與父節點(注意父節點為根節點時只能為黑色)交換顏色、將兄弟節點的右子節點設定為黑色、對父節點左旋。

3.2兄弟節點左側

3.2.1兄弟節點的左子節點(為黑色|不存在左子節點) & 右子節點為紅色。

刪除節點的兄弟節點與兄弟節點的右子節點交換顏色(兄弟節點設定為紅色,兄弟節點右子節點設定為黑色)、對兄弟節點左旋。之後轉化為3.2.2。

3.2.2兄弟節點的左子節點紅色&右子節點(任意色|不存在)

刪除節點的兄弟節點與父節點(注意父節點為根節點時只能為黑色)交換顏色、將兄弟節點的左子節點設定為黑色、對父節點右旋。

紅黑樹學習筆記

二叉樹,他的定義是每個節點最多只有兩個子樹 即左子樹和右子樹,當然也可以沒有子樹 如下圖是乙個簡單的二叉樹 對於這樣的資料結構,在c語言中通常這樣來定義結構體?1 2 3 4 5 typedefstruct binary tree binarytree 二叉搜尋樹,首先他也是乙個二叉樹,與二叉樹不同...

紅黑樹學習筆記

因為學習hashmap的時候,遇到了紅黑樹,故而複習哈,想深度學習的請轉到下面鏈結,作者 並茂的詳細講解了哈,分析的很清楚,覺得好的不忘給別人手動比心。30張圖帶你徹底理解紅黑樹 因為從這裡開始,是自己的學習筆記,從上面提到的文章中學習總結的,主要是為了給自己看,記錄哈,容易忘記,純概念,可能比較苦...

紅黑樹學習筆記

1.每個節點不是紅色就是黑色 2.不可能有連在一起的紅色節點 3.根節點都是黑色的 root 沒有父節點的節點就是根節點,即入度為0 4.每個紅色節點的兩個子節點都是黑色,葉子節點都是黑色,出度為0,滿足了性質就可以近似的平衡了,不一定要紅黑,也可以是其他的。紅黑樹有三種旋轉方式 1.改變顏色 紅變...