紅黑樹小抄

2021-10-16 05:08:39 字數 967 閱讀 1590

演算法分析課 期末考紅黑樹也是沒誰了…

不過不幸中的萬幸是應該只考插入,

我就在這打個小抄,大家就當考前熱個身

是一顆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...