《戀上數(shù)據(jù)結(jié)構(gòu)與算法一》筆記(十一)紅黑樹

目錄
  • 序言
  • 紅黑樹必須滿足以下5條性質(zhì)
  • 添加
  • 刪除
一 序言

紅黑樹也是一種自平衡的二叉搜索樹吃谣,以前也叫做平衡二叉B樹(Symmetric Binary B-tree)

二 紅黑樹必須滿足以下5條性質(zhì)

1.節(jié)點是RED或者是BLACK

  1. 根節(jié)點是BLACK
  2. 葉子節(jié)點(外部節(jié)點冰肴,空節(jié)點)都是BLACK
  3. RED節(jié)點的子節(jié)點都是BLACK
    4.1 RED節(jié)點的parent都是BLACK
    4.2 從根節(jié)點到葉子節(jié)點的所有路徑上不能有2個連續(xù)的RED節(jié)點
  4. 從任一節(jié)點到葉子節(jié)點的所有路徑都包含相同數(shù)目的BLACK節(jié)點
image.png
2.1 請問下面這棵是紅黑樹嗎暑椰?
image.png

紅黑樹必須滿足以下5條性質(zhì)

  1. 節(jié)點是RED或者BLACK
  2. 根節(jié)點是BLACK
  3. 葉子節(jié)點(外部節(jié)點美浦,空節(jié)點)都是BLACK
  4. RED節(jié)點的子節(jié)點都是BLACK
    4.1 RED節(jié)點的子節(jié)點都是BLACK
    4.2 從根節(jié)點到葉子節(jié)點的所有路徑上不能有2個連續(xù)的RED節(jié)點
  5. 從任一節(jié)點到葉子節(jié)點的所有路徑都包含相同數(shù)目的BLACK節(jié)點
2.2 紅黑樹的等價交換
  • 紅黑樹和4階B樹(2-3-4樹)具有等價性
  • BLACK 節(jié)點與它的 RED 子節(jié)點融合在一起失晴,形成1個B樹節(jié)點
  • 紅黑樹的 BLACK 節(jié)點個數(shù) 與 4階B樹的節(jié)點總個數(shù) 相等
  • 網(wǎng)上有些教程:用 2-3樹 與 紅黑樹 進行類比臭杰,這是極其不嚴(yán)謹(jǐn)?shù)模?-3樹 并不能完美匹配 紅黑樹 的所有情況
  • 注意:因為PPT界面空間有限曹动,后面展示的紅黑樹都會省略NULL 節(jié)點

紅黑樹

image.png

等價交換后的4階B樹

image.png
2.3 幾個英文單詞
  • parent:父節(jié)點
  • sibling:兄弟節(jié)點
  • uncle:叔父節(jié)點( parent 的兄弟節(jié)點)
  • grand:祖父節(jié)點( parent 的父節(jié)點)
三 添加

已知

  • B樹中,新元素必定是添加到葉子節(jié)點中
  • 4階B樹所有節(jié)點的元素個數(shù) x 都符合 1 ≤ x ≤ 3
  • 如果添加的是根節(jié)點饰恕,染成BLACK 即可

備注:建議新添加的節(jié)點默認為 RED挠羔,這樣能夠讓紅黑樹的性質(zhì)盡快滿足(性質(zhì) 1、2埋嵌、3破加、5 都滿足,性質(zhì) 4 不一定)

image.png
3.1 添加的所有情況
  • 有 4 種情況滿足紅黑樹的性質(zhì) 4 :parentBLACK

1.同樣也滿足 4階B樹 的性質(zhì)
2.因此不用做任何額外處理

image.png
  • 有 8 種情況不滿足紅黑樹的性質(zhì) 4 :parentRED( Double Red )
  1. 其中前 4 種屬于B樹節(jié)點上溢的情況
image.png
3.2 修復(fù) - 修復(fù)性質(zhì)4 - LL\RR

判定條件:uncle 不是RED

  1. parent 染成 BLACK雹嗦,grand 染成 RED
  2. grand 進行單旋操作
    2.1 LL:右旋轉(zhuǎn)
    2.2 RR:左旋轉(zhuǎn)
image.png
3.3 添加 - 修復(fù)性質(zhì)4 - LR\RL

判定條件:uncle 不是RED

  1. 自己染成BLACK范舀,grand染成RED
  2. 進行雙旋操作
    2.1 LR:parent 左旋轉(zhuǎn), grand 右旋轉(zhuǎn)
    2.2 RL:parent 右旋轉(zhuǎn)了罪, grand 左旋轉(zhuǎn)
image.png
3.4 添加-修復(fù)性質(zhì)4-上溢-LL

判定條件:uncleRED

  1. parent锭环、uncle 染成 BLACK
  2. grand 向上合并
    2.1 染成 RED,當(dāng)做是新添加的節(jié)點進行處理
    2.2 grand 向上合并時泊藕,可能繼續(xù)發(fā)生上溢
    2.3 若上溢持續(xù)到根節(jié)點辅辩,只需將根節(jié)點染成 BLACK
上溢-LL.png
3.5 添加-修復(fù)性質(zhì)4-上溢-RR

判定條件:uncle 是RED

  1. parentuncle 染成 BLACK
  2. grand 向上合并
    2.1 染成 RED吱七,當(dāng)做是新添加的節(jié)點進行處理
上溢-RR.png
3.6 添加-修復(fù)性質(zhì)4-上溢-LR

判定條件:uncleRED

  1. parent汽久、uncle 染成 BLACK
  2. grand 向上合并
    2.1 染成 RED,當(dāng)做是新添加的節(jié)點進行處理
上溢-LR.png
3.7 添加-修復(fù)性質(zhì)4-上溢-RL

判定條件:uncleRED

  1. parent踊餐、uncle 染成 BLACK
  2. grand 向上合并
    2.1 染成 RED景醇,當(dāng)做是新添加的節(jié)點進行處理
上溢-RL.png
四 刪除

B樹中,最后真正被刪除的元素都在葉子節(jié)點中

刪除.png
4.1 刪除 – RED節(jié)點
  • 直接刪除吝岭,不用作任何調(diào)整
刪除-RED節(jié)點.png
4.2 刪除-BLACK節(jié)點

有 3 種情況

  1. 擁有 2RED 子節(jié)點的 BLACK 節(jié)點
    1.1 不可能被直接刪除三痰,因為會找它的子節(jié)點替代刪除
    1.2 因此不用考慮這種情況

  2. 擁有 1 個 RED 子節(jié)點的 BLACK 節(jié)點

  3. BLACK 葉子節(jié)點

image.png
4.3 刪除 – 擁有1個RED子節(jié)點的BLACK節(jié)點

判定條件:用以替代的子節(jié)點是 RED

將替代的子節(jié)點染成BLACK 即可保持紅黑樹性質(zhì)

image.png
image.png
4.4 刪除 – BLACK葉子節(jié)點 – sibling為BLACK
  1. BLACK 葉子節(jié)點被刪除后,會導(dǎo)致B樹節(jié)點下溢(比如刪除88)

  2. 如果 sibling 至少有 1 個 RED 子節(jié)點
    2.1 進行旋轉(zhuǎn)操作
    2.2 旋轉(zhuǎn)之后的中心節(jié)點繼承 parent 的顏色
    2.3 旋轉(zhuǎn)之后的左右節(jié)點染為 BLACK

  • 下圖是3種需要刪除的情況
image.png
  • 下圖對應(yīng)著刪除節(jié)點88后窜管,旋轉(zhuǎn)之后的樣子
image.png
4.5 刪除 – BLACK葉子節(jié)點 – siblingBLACK

判定條件:sibling 沒有 1RED 子節(jié)點

  • sibling 染成 RED散劫、parent 染成 BLACK 即可修復(fù)紅黑樹性質(zhì)

如果 parentBLACK

  1. 會導(dǎo)致parent 也下溢
  2. 這時只需要把 parent 當(dāng)做被刪除的節(jié)點處理即可
image.png

項目連接地址 - 12_RedBlackTree


本文參考 MJ老師的 戀上數(shù)據(jù)結(jié)構(gòu)與算法


《戀上數(shù)據(jù)結(jié)構(gòu)與算法一》筆記


本人技術(shù)水平有限,如有錯誤歡迎指正幕帆。
書寫整理不易获搏,您的打賞點贊是對我最大的支持和鼓勵。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末失乾,一起剝皮案震驚了整個濱河市常熙,隨后出現(xiàn)的幾起案子纬乍,更是在濱河造成了極大的恐慌,老刑警劉巖裸卫,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仿贬,死亡現(xiàn)場離奇詭異,居然都是意外死亡墓贿,警方通過查閱死者的電腦和手機茧泪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來聋袋,“玉大人队伟,你說我怎么就攤上這事∮睦眨” “怎么了缰泡?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長代嗤。 經(jīng)常有香客問我,道長缠借,這世上最難降的妖魔是什么干毅? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮泼返,結(jié)果婚禮上硝逢,老公的妹妹穿的比我還像新娘。我一直安慰自己绅喉,他們只是感情好渠鸽,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柴罐,像睡著了一般徽缚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上革屠,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天凿试,我揣著相機與錄音,去河邊找鬼似芝。 笑死那婉,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的党瓮。 我是一名探鬼主播详炬,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寞奸!你這毒婦竟也來了呛谜?” 一聲冷哼從身側(cè)響起在跳,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎呻率,沒想到半個月后硬毕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡礼仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年吐咳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片元践。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡韭脊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出单旁,到底是詐尸還是另有隱情沪羔,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布象浑,位于F島的核電站蔫饰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏愉豺。R本人自食惡果不足惜篓吁,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚪拦。 院中可真熱鬧杖剪,春花似錦、人聲如沸驰贷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽括袒。三九已至次兆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锹锰,已是汗流浹背类垦。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留城须,地道東北人蚤认。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像糕伐,于是被迫代替她去往敵國和親砰琢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 接上章: B樹(多路查找樹) 本章主要介紹【紅黑樹】的性質(zhì)以及【紅黑樹】節(jié)點的增加和刪除操作。是類比B樹節(jié)點的增加...
    翀鷹精靈閱讀 451評論 0 2
  • 紅黑樹 紅黑樹也是一種自平衡的二叉搜索樹以前也叫做平衡二叉B樹(Symmetric Binary B-tree) ...
    ducktobey閱讀 750評論 0 1
  • 紅黑樹(Red Black Tree) 紅黑樹也是一種自平衡的二叉搜索樹陪汽,紅黑樹必須滿足一下5條性質(zhì): 1.節(jié)點是...
    coder_feng閱讀 285評論 0 0
  • 1. 樹的概念 一個樹由節(jié)點組成训唱,這些節(jié)點包含根節(jié)點,父節(jié)點挚冤,子節(jié)點况增,兄弟節(jié)點;沒有任何一個節(jié)點的樹稱為空樹训挡;如果...
    HChase閱讀 6,121評論 0 34
  • 開始閱讀有關(guān)生命 這一年澜薄,總是在很多報道上看到一些人自殺的消息为肮,起初,也許那些人并不為人所知肤京,可是頃刻之間颊艳,似乎所...
    開飯了小呆閱讀 289評論 2 1