紅黑樹的插入操作相對刪除操作比較簡單。
紅黑樹要滿足:任一節點至null的任何路徑,所含黑節點數必須相同。所以,為了滿足此性質,插入節點應該為紅色。
如果插入節點的父親為黑色,則不需要進行調整,若為紅色,有三種情況需要討論。
1. 父節點為紅色,叔節點為紅色
對於這種情況,同時改變父、叔節點顏色為黑色,並將爺爺節點置紅,這樣在這個區域性範圍內,保持黑色平衡。將x置為爺爺節點,
如果x此時為根,則置x為黑色,調整結束,否則相當於又插入了乙個紅色節點,進行新一輪迭代。
2. 父節點為紅色,叔節點為黑色,左外側插入
此時爺爺節點必為黑色。將父節點置為黑色,爺爺節點置為紅色,這樣,左邊多了乙個黑色節點,右旋將其降下來。
新插入節點為x,父節點為p,爺爺節點為g。
3. 父節點為紅色,叔節點為黑色,左內側插入
此時,左旋,將其變成情況2,再由情況2的步驟進行插入。
為求簡略,只有一側插入**,另一側由於對稱性,很好解決。注意:空節點視為黑色。
x->color = __rb_tree_red;
while (x != root && x->parent->color == __rb_tree_red)
else
x->parent->color = __rb_tree_black; //情況2
x->parent->parent->color = __rb_tree_red;
__rb_tree_rotate_right(x->parent->parent, root);}}
} //end of while
root->color = __rb_tree_black;
紅黑樹插入
一 什麼是紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在電腦科學中用到的一種資料結構,典型的用途是實現關聯陣列。紅黑樹是一棵二叉搜尋樹,它在每個結點上增加了乙個儲存位來表示結點的顏色,可以是red或black。一棵紅黑樹是滿足下面紅黑性質的二叉搜尋樹 1 每乙個結點或是紅...
紅黑樹 插入
一 滿足下面幾個條件的二叉搜尋樹,稱為紅黑樹 1.任何乙個節點都被著色 紅色或是黑色。2.根節點是黑色的。3.所有的nil節點都看成黑色 nil節點是就是乙個假想的或是無實在意義的節點,所有應該指向null的指標,都看成指向了nil節點。包括葉節點的子節點指標或是根節點的父指標 4.如果乙個節點是紅...
紅黑樹 插入
嗯。總是忘。再查以前做的筆記也好麻煩。於是將以前做的筆記重新整理 再整合其他優質內容,存到部落格上吧,方便以後看。紅黑樹是許多 平衡 搜尋樹的一種,可以保證在最壞情況下基本動態操作集合的時間複雜度為o lgn 1 紅黑樹的性質 以上節選自 演算法導論 第三版 首先可以看到,紅黑樹是一顆二叉搜尋樹,那...