前提:插入節點使用紅色。操作:直接插入。設定:祖父節點為pp,父節點為p,叔叔節點為u,插入節點為i。
操作:更新當前節點的值為插入節點的值。
操作:由於插入節點是紅色,不影響紅黑樹自平衡,直接插入即可不需要自平衡
4.1 u節點存在並且為紅色 (黑紅紅)
操作 :將pp節點和p節點以及u節點變色,形成平衡,如果pp的父節點是紅色就違反了紅黑樹性質,則到時將pp節點設為當前節點,進行後續操作。
4.2 u節點不存在,或為黑節點,並且插入節點的p節點是pp節點的左子節點
4.2.1 新插入節點為p的左子節點(ll)
操作:1. 將p和pp節點變色。2.對pp節點右旋。
4.2.2 新插入節點為p的右子節點
1.對p節點進行左旋。2.將p節點是這位當前節點,得到4.1的情景並對其進行4.1的操作。
4.3 u節點不存在,或為黑節點,並且插入節點的p節點是pp節點的右子節點
4.3.1 新插入節點為p的右子節點(rr紅)
操作:1.變色2.左旋
4.3.2 新插入節點為p的左子節點(rl紅)
操作:1.對p進行右旋,得到rr 紅情景2.進行4.3.1的操作
步驟:①建立rbtree,定義顏色
②建立rbnode
③輔助方法定義: parentof(node), isred(node), setred(node), setblack(node), inorderprint()
④左旋方法定義: leftrotate(node)
⑤右旋方法定義: rightrotate(node)
⑥公開插入介面方法定義: insert(k key, v value);
⑦內部插入介面方法定義: insert(rbnode node);
⑧修正插入導致紅黑樹失衡的方法定義: insertflxup(rbnode node);
⑨測試紅黑樹正確性
**自己寫,或者網上多的是。
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹筆記 紅黑樹的插入操作
紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...