演算法分析課 期末考紅黑樹也是沒誰了…
不過不幸中的萬幸是應該只考插入,
我就在這打個小抄,大家就當考前熱個身
是一顆bst(不會bst請自行查閱)
根節點是黑色,節點要麼是紅色要麼是黑色
假設所有葉子結點是nil,則任意子樹任意路徑到達nil的黑色節點個數相同
所有葉子結點都是nil,並且是黑色
紅節點不與紅節點鄰接,即如果某個節點是紅色,其子節點一定是黑色(nil也是黑色)
前導知識
待插入的節點一開始設為紅色
我們根據bst的性質找到葉子結點的位置插入
叔叔節點:我們稱當前節點的父節點的兄弟節點為叔叔節點我們把指標指向待插入節點, 討論待插入節點幾種情況:
父節點是黑色,很幸運,直接插入。
當前沒有節點,直接插入,並把節點染成黑色
父節點是紅色
叔叔節點是紅色
叔叔節點是黑色
ll lr
rr
rl
這裡打個小抄,不做證明
插入、查詢、刪除的時間複雜度只與紅黑樹的高度有關hei
ght=
2log
(n+1
)→o(
logn
)height = 2log(n+1) \rightarrow o(logn)
height
=2lo
g(n+
1)→o
(log
n)證明的思路大概就是:
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹筆記 紅黑樹的插入操作
紅黑樹的插入操作可以在o logn 的時間內完成。開始插入節點的時候和二叉查詢樹一樣,只需要最後將插入的節點著成紅色,為了保證紅黑樹的性質,需要通過rb insertfixup函式來調整該節點,對其重新著色並旋轉。下面先呼叫rb insert 函式將乙個節點插入到紅黑樹中,同樣先上偽 rb inse...