紅黑樹詳解 原理 史上最強 精華

2021-07-14 15:33:28 字數 2475 閱讀 4696

聯絡作者[email protected]取得授權

網上很多紅黑樹的講解都沒有分析清楚插入刪除各種情況是怎麼來的,他們大多把分析圖畫的很複雜,其實這些情況都是極其簡單的,我這裡重點推導各種情況是怎麼來的,不解釋各種情況怎麼調整,因為結構很簡單調整很容易,且網上很多。紅黑樹的精髓是明白各種情況是怎麼來的,弄清楚這個才是真正掌握紅黑樹。

五個性質:

1、節點要麼紅,要麼黑

2、根節點為黑

3、nil(葉節點)為黑,這條沒什麼卵用

4、紅節點的兩個子節點為黑

5、從某節點到各葉節點的路徑上的黑節點數相等

紅黑樹必須滿足這5個條件,前3個性質基本廢話,增刪節點後,性質4和性質5可能會破壞,紅黑樹調整,主要滿足這兩個條件即可 

1插入

為了盡量滿足4和5兩個條件,要點是:

插入的節點必須為紅色節點,原因:從某節點到各葉節點的路徑上的黑節點數目跟原來一樣,不會變化,這樣一來性質5是滿足的,只需要考慮滿足性質4即可。

約定:新插入節點為n,父節點為p,叔叔節點為u,祖父節點為g,兄弟節點為s,兄弟節點的左子為sl,兄弟節點的右子為sr

由於插入節點前的原來紅黑樹必定平衡,只需要討論,爺爺輩,父輩,子輩 等3輩情況,也就是約定的這些節點情況

我們現在只窮舉違反性質4的情況,這才是需要調整的紅黑樹的情況

p為紅色才會違反4,插入n之前原樹是平衡的(滿足5個性質),g不可能是紅,否則違反4

所以需要調整的情況下一定有:n=r, g=b, p=r這3個固定條件

剩下的就只有u及其子孫情況未知

分析1:插入n前,g的左子只有p為紅,那麼g的右子上不能有黑節點了,所以u要麼為紅色,要麼不存在。那麼u為紅色時它有沒有子節點呢?答案是肯定沒有,也就是u無子,假設u要有子,必須是黑子,前面已經說了,g的右子樹上不能有黑節點。

結論:u要麼紅色,要麼不存在

分析2:p到底在插入n這個節點前,會不會有子?答案是肯定沒有。p為紅,p若有子必為黑子,那麼p在插入n前,一邊為空,黑子數為0,另一邊就不能有黑子,所以p再插入n前也無子

請況一:u=r,此時假設p有另外乙個節點(還有乙個是剛插入的n),另外乙個節點必為黑,問題來了,插入n之前,經過p的左右子的黑節點數不一樣,故推斷p不能有另外乙個節點,那麼u也不能有子節點,有就必須是黑,g的左右子樹上的黑節點數就不會等,

結論:情況一時,必定有p僅有乙個子節點n,u無子節點

調整: p和n染黑,g染紅,n指向g遞迴,直到n為根節點,染黑

情況二:u=b(準確表述為u沒有),n為p的左子,與二類似,u為nil節點

結論: 情況二  時g沒有右子,p沒有右子,n為p的左子

調整:p,g顏色交換,g為軸右旋,完

情況三:u=b(準確表述為u沒有),n為p的右子,n插入前通過g的右子樹的黑節點數字2,那麼g到p到p的右子的黑節點數只有一,這種情況只有u為nil節點才說的通

結論: 情況三  時g沒有右子,p沒有左子,n為p的右子

調整:p節點為軸左旋,變成情況二

2刪除刪除節點x後,需要在子樹中選擇乙個節點來頂替x的位置,我們選擇x左子樹裡面最大的節點來頂替,而這個節點一定在樹的底部(假設根節點為頂部),這個頂替上來的節點染成x的顏色,這就等價於,只是刪除了頂替上來的節點,刪除操作移動到了樹的底部,刪除操作在底部進行,討論起來容易很多。

這個頂替上來的節點是x左子樹裡面最大的節點,這個節點有特殊性質,沒有右子節點

現在問題變成:刪除乙個樹底部的,沒有右子的節點x

如果x是紅色,頂替節點n為紅色,不用調整,結束

如果x是紅色,頂替節點n為黑色,等價於刪除樹底部的黑色節點,這種情況合併到下面x為黑色情況

如果x是黑色,頂替節點n為紅色,n節點染黑,結束

如果x是黑色,頂替節點n為黑色,討論

只有刪除黑色節點,才需要討論

那麼需要調整的情況下,條件有:x為黑色,x無右子

約定刪除節點為x,x的父節點為p,x的兄弟節點為s, s的左子為sl, s的右子為sr

根據x的左子情況討論

情況一:

x有左子,左子必定為紅,因為右子為空,根據紅黑樹性質5,左子上不能有黑節點,所以左子也就不能有子節點

刪除x,左子頂替,左子n為紅,n染黑,結束

情況二:

x無左子,只能根據s的情況討論

1s=r,s必定有子,且兩子都為黑,即sl=b, sr=b。因為x左子樹裡面最大的節點,x必定是p的右節點,p的右子樹黑節點數為1個,左子樹上每條路徑黑節點樹為1, s是紅色的,只能是它的兩子為黑。sl和sr不會有子節點了,否則整個p的左右子樹不平衡

調整:p右旋,變成2-1情況

2 s=b, s不能再有黑色子節點

2-1 s無節點

調整:s染紅,向上遞迴

2-2 sl為紅,無sr

調整:p右旋, sl染黑

2-3 sl和sr都為紅

調整:p右旋,sl染黑

情況2-2,2-3可合併為一種情況

2-4 sl沒有,sr為紅

調整:s左旋,變成情況2-2

附:沒有節點跟節點為黑統一成乙個意思

紅黑樹原理

若左子樹不為空,則左子樹上所有節點的值都小於根節點的值 若右子樹不為空,則右子樹上所有節點的值都大於根節點的值 且左右子樹都為二叉搜尋樹 查詢 必須從根節點開始查詢 如果值比根節點大則查詢右子樹,否則左子樹,直到找到節點 插入 與查詢類似 逐個節點對比,直到找到滿足條件的null,就插入到相應位置 ...

詳解紅黑樹

1.節點都有顏色 2.在插入和刪除的過程中,要遵循儲存這些顏色不同排列的規則。帶顏色的節點 在紅 黑樹中,每乙個節點或者是黑色的或者是紅色的。當然也可以是任意的兩種顏色 紅 黑規則 當插入或者刪除乙個新節點時,必須遵循一定的規則。它們被稱為紅 黑規則。遵循這些規則,樹就是平衡的。這些規則是 每乙個節...

紅黑樹詳解

在這片文章 裡講到了二叉查詢樹,很好很棒,就是有乙個缺點,當根節點最大或最小時,會出現單腿情況,最差成了鍊錶。於是乎,就是誕生了紅黑樹。紅黑樹是一種平衡樹,但是不追求絕對的平衡 追求絕對的平衡會費時費資源 追求一定的平衡。2.紅黑樹的生成規則 1 把二叉樹所以節點先弄成紅色 2 根據紅黑樹的性質 生...