二叉樹(shù) - 紅黑樹(shù)

0. 定義

R-B Tree俯画,全稱是Red-Black Tree,又稱為“紅黑樹(shù)”司草,它一種特殊的二叉查找樹(shù)艰垂。紅黑樹(shù)的每個(gè)節(jié)點(diǎn)上都有存儲(chǔ)位表示節(jié)點(diǎn)的顏色泡仗,可以是紅(Red)或黑(Black)。

紅黑樹(shù)的特性:

  1. 每個(gè)節(jié)點(diǎn)或者是黑色材泄,或者是紅色沮焕。
  2. 根節(jié)點(diǎn)是黑色。
  3. 每個(gè)葉子節(jié)點(diǎn)(NIL)是黑色拉宗。(注意:這里葉子節(jié)點(diǎn)峦树,是指為空(NIL或NULL)的葉子節(jié)點(diǎn)!)
  4. 如果一個(gè)節(jié)點(diǎn)是紅色的旦事,則它的子節(jié)點(diǎn)必須是黑色的魁巩。(沒(méi)有兩個(gè)連續(xù)的紅色節(jié)點(diǎn))
  5. 從一個(gè)節(jié)點(diǎn)到該節(jié)點(diǎn)的子孫節(jié)點(diǎn)的所有路徑上包含相同數(shù)目的黑節(jié)點(diǎn)。


    紅黑樹(shù)示例

1. 添加節(jié)點(diǎn)

注意:新添加的節(jié)點(diǎn)均為紅色

  1. 如果插入的是根節(jié)點(diǎn)姐浮,直接涂黑

  2. 如果插入節(jié)點(diǎn)的父節(jié)點(diǎn)是黑色谷遂,不用調(diào)整
    此時(shí)并未破壞原有的樹(shù)的特性。

  3. 如果插入節(jié)點(diǎn)的父節(jié)點(diǎn)是紅色
    這時(shí)看叔叔節(jié)點(diǎn)

  • 如果叔叔節(jié)點(diǎn)是紅色
    將父節(jié)點(diǎn)和叔叔節(jié)點(diǎn)變?yōu)楹谏衾穑娓腹?jié)點(diǎn)變?yōu)榧t色肾扰,然后將祖父節(jié)點(diǎn)看做當(dāng)前節(jié)點(diǎn)繼續(xù)處理
  • 如果叔叔節(jié)點(diǎn)是黑色
    • 如果父節(jié)點(diǎn)是祖父節(jié)點(diǎn)的左孩子,當(dāng)前節(jié)點(diǎn)是其父節(jié)點(diǎn)的左孩子蛋逾,則做LL旋轉(zhuǎn)集晚,互換父節(jié)點(diǎn)和祖父節(jié)點(diǎn)的顏色
    • 如果父節(jié)點(diǎn)是祖父節(jié)點(diǎn)的左孩子,當(dāng)前節(jié)點(diǎn)是其父節(jié)點(diǎn)的右孩子区匣,則做LR旋轉(zhuǎn)偷拔,第二次旋轉(zhuǎn)時(shí)互換祖父節(jié)點(diǎn)和新的父節(jié)點(diǎn)的顏色
    • 如果父節(jié)點(diǎn)是祖父節(jié)點(diǎn)的右孩子,與上面兩種情況互為鏡像

2. 刪除節(jié)點(diǎn)

刪除節(jié)點(diǎn)和普通二叉查找樹(shù)刪除節(jié)點(diǎn)一樣亏钩,都是刪除其后繼節(jié)點(diǎn)莲绰。

以下當(dāng)前節(jié)點(diǎn)均是指其后繼結(jié)點(diǎn)

  1. 如果當(dāng)前節(jié)點(diǎn)是紅色,直接刪除即可

  2. 如果當(dāng)前節(jié)點(diǎn)是黑色姑丑,且為根節(jié)點(diǎn)蛤签,直接刪除即可

  3. 如果當(dāng)前節(jié)點(diǎn)是黑色(由紅黑樹(shù)的性質(zhì)可以推斷,黑色節(jié)點(diǎn)必定有兄弟節(jié)點(diǎn))

  • 如果兄弟節(jié)點(diǎn)是紅色(則兄弟節(jié)點(diǎn)的孩子為黑色)
    可以對(duì)父節(jié)點(diǎn)進(jìn)行左旋栅哀,交換父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的顏色顷啼,使當(dāng)前節(jié)點(diǎn)的兄弟節(jié)點(diǎn)變?yōu)楹谏^續(xù)進(jìn)行處理
  • 如果兄弟節(jié)點(diǎn)是黑色昌屉,并且當(dāng)前節(jié)點(diǎn)是父節(jié)點(diǎn)的左孩子
    • 如果兄弟節(jié)點(diǎn)的兩個(gè)孩子都是黑色
      交換兄弟節(jié)點(diǎn)和父節(jié)點(diǎn)的顏色钙蒙,把父節(jié)點(diǎn)當(dāng)做當(dāng)前節(jié)點(diǎn),繼續(xù)處理
    • 如果兄弟節(jié)點(diǎn)的右孩子為紅色
      交換兄弟節(jié)點(diǎn)和父節(jié)點(diǎn)的顏色间驮,右孩子變黑躬厌,父節(jié)點(diǎn)左旋
    • 如果兄弟節(jié)點(diǎn)的左孩子為紅色
      交換兄弟節(jié)點(diǎn)和左子的顏色,兄弟節(jié)點(diǎn)右旋,此時(shí)變?yōu)橛易訛榧t色的情況
  • 如果兄弟節(jié)點(diǎn)是黑色扛施,并且當(dāng)前節(jié)點(diǎn)是父節(jié)點(diǎn)的右孩子
    與上面左孩子情況互為鏡像

3. 練習(xí)

跟著這篇文章操作一遍鸿捧,基本能全部掌握:數(shù)據(jù)結(jié)構(gòu)之紅黑樹(shù)插入與刪除全程演示

4. 參考

  1. 《算法導(dǎo)論》
  2. 最容易懂得紅黑樹(shù)
  3. 【數(shù)據(jù)結(jié)構(gòu)和算法05】 紅-黑樹(shù)(看完包懂~)
  4. 數(shù)據(jù)結(jié)構(gòu)之紅黑樹(shù)插入與刪除全程演示
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市疙渣,隨后出現(xiàn)的幾起案子匙奴,更是在濱河造成了極大的恐慌,老刑警劉巖妄荔,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泼菌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡啦租,警方通過(guò)查閱死者的電腦和手機(jī)哗伯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)篷角,“玉大人焊刹,你說(shuō)我怎么就攤上這事】叶祝” “怎么了虐块?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)嘉蕾。 經(jīng)常有香客問(wèn)我贺奠,道長(zhǎng),這世上最難降的妖魔是什么荆针? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任敞嗡,我火速辦了婚禮颁糟,結(jié)果婚禮上航背,老公的妹妹穿的比我還像新娘。我一直安慰自己棱貌,他們只是感情好玖媚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著婚脱,像睡著了一般今魔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上障贸,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天错森,我揣著相機(jī)與錄音,去河邊找鬼篮洁。 笑死涩维,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袁波。 我是一名探鬼主播瓦阐,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蜗侈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了睡蟋?” 一聲冷哼從身側(cè)響起踏幻,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎戳杀,沒(méi)想到半個(gè)月后该面,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡豺瘤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年吆倦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坐求。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蚕泽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出桥嗤,到底是詐尸還是另有隱情须妻,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布泛领,位于F島的核電站荒吏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渊鞋。R本人自食惡果不足惜绰更,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锡宋。 院中可真熱鬧儡湾,春花似錦、人聲如沸执俩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)役首。三九已至尝丐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衡奥,已是汗流浹背爹袁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矮固,地道東北人失息。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親根时。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘦赫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • R-B Tree簡(jiǎn)介 R-B Tree,全稱是Red-Black Tree蛤迎,又稱為“紅黑樹(shù)”确虱,它一種特殊的二叉查找...
    張晨輝Allen閱讀 9,256評(píng)論 5 30
  • 1、紅黑樹(shù)介紹 紅黑樹(shù)又稱R-B Tree替裆,全稱是Red-Black Tree校辩,它是一種特殊的二叉查找樹(shù),紅黑樹(shù)的...
    文哥的學(xué)習(xí)日記閱讀 9,870評(píng)論 1 35
  • 首先在分析紅黑樹(shù)刪除操作之前先說(shuō)明一下搜索二叉樹(shù)中刪除一個(gè)節(jié)點(diǎn)時(shí)的一個(gè)技巧辆童。當(dāng)刪除節(jié)點(diǎn)位與樹(shù)的內(nèi)節(jié)點(diǎn)時(shí)宜咒,這個(gè)時(shí)候可...
    Nier_if閱讀 2,623評(píng)論 2 10
  • 知乎上有位同學(xué)這樣解釋二叉樹(shù),我覺(jué)得有一定道理把鉴。 本質(zhì)上故黑,二叉樹(shù),是對(duì)鏈表和數(shù)組的一個(gè)折中庭砍。 鏈表: 利于插入和...
    夏大王2019閱讀 559評(píng)論 0 1
  • 樹(shù)的概述 樹(shù)是一種非常常用的數(shù)據(jù)結(jié)構(gòu)场晶,樹(shù)與前面介紹的線性表,棧怠缸,隊(duì)列等線性結(jié)構(gòu)不同诗轻,樹(shù)是一種非線性結(jié)構(gòu) 1.樹(shù)的定...
    Jack921閱讀 4,452評(píng)論 1 31