RBT 紅黑樹終結者

對於紅黑樹,任何不平衡都會在三次旋轉內解決?
可能很多同學看面經,會看到關於紅黑樹的這樣一條性質:對於紅黑樹,任何不平衡都會在三次旋轉內解決。但是,看過這一章所介紹的紅黑樹,肯定很多同學發現了,我們這個課程所實現的紅黑樹是沒有這個性質的。但是,更優化的紅黑樹實現可以有這個性質!

任務

在這裏,關鍵在於,這個課程中所介紹的紅黑樹(包括《算法4》所介紹的紅黑樹),是一種特殊的紅黑樹——左傾紅黑樹。但是紅黑樹本身並不需要“左傾”性質。也就是說,我們在這一章實現的左傾紅黑樹一定是紅黑樹;但是紅黑樹不一定全是左傾紅黑樹。換句話說,我們的代碼爲了維護“左傾”這個性質,做了額外的事情,消耗了性能,使得我們在這個課程中的實現,沒有“任何不平衡都可以在三次旋轉內解決”這麼好的性能優勢。

在這個課程中,我們也提及了紅黑樹的五個性質。只要滿足着五個性質,就是紅黑樹!這五個性質是紅黑樹的標準定義。

這五個性質再羅列一下,是:

所有節點非紅即黑;

根節點爲黑;

最後的NULL節點爲黑;

紅節點的孩子一定爲黑;

黑平衡
仔細觀察這五個性質,大家就會發現,紅黑樹的標準定義中沒有規定紅節點一定左傾:)

換句話說,以下的兩種形狀,是滿足紅黑樹的性質的!(其中B代表黑節點;R代表紅節點):

   B            
 /   \          
B     R

   B
 /   \
R     R
但是,由於在我們這個課程的實現中,以上兩種情況並不滿足“左傾”的性質,我們就需要額外的操作,將這兩種情況轉換成“左傾”的樣子。這也就是我在課程中說的,紅黑樹有更優的實現。當我們放寬限制,讓紅黑樹也可以包含上面兩種樣子的時候,我們需要的旋轉調整將減少,並且有對於任何不平衡,三次旋轉即可解決!

印象裏,更多資源聯繫qq2503961206《算法導論》中紅黑樹的實現,是滿足這個性質的。有興趣的同學,不妨找來《算法導論》,好好研究一下:)

那麼如果以上的兩個樣子也符合紅黑樹的定義,意味着什麼呢?

我們可以仔細觀察一下其中的第二種樣子:

   B
 /   \
R     R
根據我們課程中介紹的紅黑樹和2-3樹的關係,這其實意味着紅黑樹不僅僅是和2-3樹等價的,還和2-4樹等價(包含2-node,3-node,4-node)。但是,對於其中的4-node,我們只能用以上的樣子表示,而不能使用以下兩種形狀:

    B    B   
   /      \
  R        R
 /          \
R            R
這是因爲以上兩種形狀,他們破壞了紅黑樹的性質4!

在這裏,請大家再回顧一下紅黑樹的五個性質!

所有節點非紅即黑;

根節點爲黑;

最後的NULL節點爲黑;更多資源聯繫qq2503961206

紅節點的孩子一定爲黑;

黑平衡
有時候,其中前三個性質,都是非常記憶的很樸素的定義。對於性質3,我們又稱又稱爲“紅色性質”,因爲它是和紅色節點相關的;相應的,性質5,我們有時候又稱爲“黑色性質”,因爲它是和黑色節點相關的。

怎麼樣,現在是不是覺得紅黑樹的5個性質很好記?:)

同時,通過這個角度,用2-4樹去理解《算法導論》中紅黑樹的實現,或許更容易。(但是不知道爲什麼,印象裏《算法導論》中完全沒有提及紅黑樹和2-3樹,2-4樹的關係!這就是《算法導論》這部著作,讓大家又愛又恨的原因吧!)

大家加油!:)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章