紅黑樹筆記
紅黑樹是一顆二叉平衡樹,查詢不會破壞平衡性,所以和二叉平衡術查詢方式一致。
從根節點開始查詢,為空就返回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.改變顏色 紅變...