紅黑樹入門

2021-07-11 13:07:35 字數 1036 閱讀 2800

要符合二叉查詢樹的基本特性:

每個節點至多只有兩個孩子

左孩子的值小於父節點,右孩子的值大於父節點

擴充套件的一些特性:

每個節點不是紅色節點就是黑色節點

根節點一定是黑色節點

葉子節點一定是黑色節點

每個紅色節點的孩子都是紅色節點

任意節點到葉子節點的路徑上所包含的黑色節點數均相同

結構上的特點:

每個節點上的屬性除了當前節點資料,左孩子以及右孩子外還包含著乙個屬性表示用來表示當前的節點的具體顏色。

使用時候的特點:

在進行插入刪除等操作的時候要判斷是否還符合以上所有的特點如果符合 那麼ok

可以繼續進行插入,但是一旦不符合則需要進行左旋以及右旋方式的操作以及適當修改節點顏色的操作使其滿足紅黑樹的特點。

時間複雜度:

一直維持在o(logn)的優秀的狀態下。

為什麼要使用紅黑樹以及它與平衡二叉樹的關係和區別:

紅黑樹的查詢效率很高,最好和最壞的情況下都很優秀這與平衡二叉樹的特點相似,但是它不完全要求左右子樹的高度差一直小於1的這個平衡二叉樹的硬性條件。所以他在重新構建紅黑樹的時候旋轉以及修改節點顏色的操作要少於平衡二叉樹,它保證了不管怎樣插入節點他在三次旋轉次數中就可以恢復紅黑樹原來的狀態。總結上來看,它查詢效率比平衡二叉樹稍稍低一點,可以忽略的時間,但是重新構建的時間消耗要遠遠小於平衡二叉樹的。所以使用紅黑樹來解決問題就顯得十分優秀了。

以上只是一些概念上的拙見,拋磚引玉方便以後的學習。另附大神的紅黑樹包含**的帖子

**chj

共同學習進步!!!

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹下 紅黑樹的實現

1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...

紅黑樹筆記 紅黑樹的插入操作

紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...