1 節點是紅色或者黑色
2 根節點是黑色的
3紅色的節點的孩子必須是黑色的 也就是紅節點下的孩子節點必須是黑色的
4每乙個從根節點到葉子節點的黑色節點數量都必須一致
5葉子節點是黑色的
紅黑樹主要在於新增和刪除的各種情況
預設新增節點為紅色節點 那麼就會出現雙紅缺陷 有兩個紅色的連著的節點 這是不合定義的 需要做調整
第一種情況:叔叔節點是紅色的 那麼實際上是出線了上溢的情況 那麼要做相應處理
不過結構的改變至多常數級別
第二種情況:叔叔節點是黑色的
這種情況不會發生向上蔓延 做一次結構調整就ok了!
第一種分類 兄弟節點s是黑色的
(1)兄弟s的孩子是紅色的
做一次旋轉和變色就解決了 s頂替p sr做頂替s操作 一次解決 沒有其他情況
(2)兄弟s的爸爸節點p是紅色的
把父親節點變黑 s節點變紅 一次解決 over!
(3)父親節點是黑色的 也就是全黑可以這麼理解
雙黑缺陷向上蔓延 但是有s紅節點可以利用
第二種分類
兄弟s節點是紅色的
雙黑缺陷沒有解決 向上蔓延 不過出現了p紅色節點 可以利用所以只會變成(1)或者(2)這兩總情況
Nginx紅黑樹分析
紅黑樹的五個特性如下 紅黑樹是一棵平衡二叉樹 每個節點非紅即黑 根節點是黑色 紅節點的子節點必為黑色 任一節點到其各個葉子節點所經過的黑色節點是相等的 nginx中的紅黑樹資料結構如下 struct ngx rbtree s 這是紅黑樹的結構 struct ngx rbtree node s 紅黑樹...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...