紅黑也是一種二叉平衡樹,但紅黑樹不要求全域性平衡,只需要區域性平衡,這樣的好處是在插入和刪除這種改變樹形態的操作時效率更高。普通的二叉平衡樹要求全域性平衡,為之付出的代價會非常大。但紅黑樹只要求區域性平衡,需要查詢的效能不是最優的,但也是比較優的,而且平衡的代價也比較小,紅黑樹對修改的查詢效率進行了平衡取捨。2-3樹由於有兩種節點型別,並且4節點的**比較複雜,因此效率也不太高。
紅黑樹是一種二叉平衡樹,那麼就要求每個節點最多最能有兩個節點。紅黑樹之所以叫紅黑樹是因為在定義中給
(1)樹中的每個節點都標誌了乙個顏色,要麼是紅節點,要麼是黑節點。
(2)並且要求根節點必須是黑節點
(3)所有的為空的葉子節點必須是黑節點
(4)每個紅節點的兩個子節點必須是黑節點,這樣保證了紅節點不可能連續。
(5)從乙個節點到它的子孫節點的路徑上包含相同數量的黑節點。
在插入和刪除操作過程中,必須保證這五個性質不被破壞,也就是說要通過相應的旋轉和變色操作來恢復這五個性質。
通過給bst的每個節點新增上顏色,並且讓所有節點都滿足這5個性質,在紅黑樹進行相應的插入的刪除操作時,效率將會大大提高,基本上,紅黑樹的插入刪除操作的時間複雜度也是對數級別的,因為紅黑樹維持了樹的區域性平衡,因此其查詢時間複雜度也是對數級別的。
紅黑樹在插入時可能會破壞樹的平衡和這五條性質,就需要通過旋轉和變色來恢復。紅黑樹的旋轉跟二叉平衡樹一樣。
當插入的節點是根節點時,直接把根節點設定成黑節點(為了保證性質2)
如果要插入的節點的父節點是黑節點時,而插入的節點是紅節點,可以直接插入
如果插入節點的父節點是紅節點並且父節點是祖先節點的左子節點時分兩種情況,如果祖先節點的右子節點是黑節點,如果插入節點是父節點的左子節點,這時插入節點是紅節點,而父節點也是紅節點,不滿足性質4,這時要將祖先節點進行右旋轉,並且將祖先節點和父節點的顏色進行對換。如果插入的節點是父節點的右子節點,則對父節點進行左旋。如果要插入的節點的父節點是祖先節點的右子節點時跟前一種情況完全映象,只需要映象操作即可。如果要插入的節點的父節點和祖先節點的右子節點都是紅節點,那麼就只需要把父節點和祖先節點的右節點都變成黑節點即可。
資料結構 紅黑樹
紅黑樹是二叉排序樹的改進,紅黑樹有幾個特點 1 節點只有2中顏色,紅色和黑色。2 根節點一定是黑色節點。3 紅色節點的子節點一定是黑色節點。4 黑色高度 根節點到每個葉子節點的路徑長度包含相同的黑色節點 相等。規定的插入的節點一定是紅色節點,紅黑樹的插入節點後需要調整的規則,插入節點需要調整的情況有...
資料結構 紅黑樹
一 紅黑樹 紅黑樹 red black tree 是一種自平衡二叉查詢樹,是在 電腦科學中用到的一種 資料結構 典型的用途是實現 關聯陣列 可以保證最長路徑不超過最短路徑的2倍,近似平衡。二 性質 性質1.節點是紅色或黑色。性質2.根節點是黑色。性質3 每個葉節點 nil節點,空節點 是黑色的。性質...
資料結構 紅黑樹
紅黑樹是一棵二叉搜尋樹,它在每個節點上增加了乙個儲存位來表示節點的顏色,可以是紅色也可以是黑色。通過對任何一條從根到葉子簡單路徑上的顏色來約束,紅黑樹保證最長路徑不超過最短路徑的兩倍,因而近似於平衡。紅黑樹滿足下面的性質 1 每個節點,不是紅色就是黑色的 2 根節點是黑色的 3 如果乙個節點是紅色的...