day10 紅黑樹(shù)

紅黑樹(shù)

紅黑樹(shù)(Red Black Tree)

紅黑樹(shù)也是一種自平衡的二叉搜索樹(shù)醒颖,紅黑樹(shù)必須滿足一下5條性質(zhì):

1.節(jié)點(diǎn)是RED或者BLCAK

2.根節(jié)點(diǎn)是BLACK

3.葉子節(jié)點(diǎn)(外部節(jié)點(diǎn)音诈,空節(jié)點(diǎn))都是BLACK

4.RED節(jié)點(diǎn)的子節(jié)點(diǎn)都是BLACK,RED節(jié)點(diǎn)的父節(jié)都是BLACK吼和,從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的所有路徑上不能有2個(gè)連續(xù)的RED節(jié)點(diǎn)

5.從任意一個(gè)節(jié)點(diǎn)到葉子節(jié)點(diǎn)的所有路徑都包含相同數(shù)目的BLACK節(jié)點(diǎn)

請(qǐng)問(wèn)下面這棵是紅黑樹(shù)么?

示例圖

答案是不是的,因?yàn)椴粷M足上面所說(shuō)的性質(zhì)5:從任意節(jié)點(diǎn)到葉子節(jié)點(diǎn)的所有路徑都包含相同的BLACK節(jié)點(diǎn)影兽,路徑55->53-null,這條路徑如果不包含null這個(gè)葉子節(jié)點(diǎn)的話,那么就只有兩個(gè)BLACK節(jié)點(diǎn)莱革,而其他的是有3個(gè)的BLACK節(jié)點(diǎn)

紅黑樹(shù)的等價(jià)變換

等價(jià)變換

紅黑樹(shù)和4階B樹(shù)(2-3-4樹(shù))具有等價(jià)性峻堰,BLACK節(jié)點(diǎn)與它的RED子節(jié)點(diǎn)融合在一起,形成一個(gè)B樹(shù)節(jié)點(diǎn)盅视,紅黑樹(shù)的BLACK節(jié)點(diǎn)個(gè)數(shù)與4階B樹(shù)的節(jié)點(diǎn)總個(gè)數(shù)相等

幾個(gè)相關(guān)的專(zhuān)業(yè)名字

parent:父節(jié)點(diǎn)

sibling:兄弟節(jié)點(diǎn)

uncle:叔父節(jié)點(diǎn)(parent的兄弟節(jié)點(diǎn))

grand:祖父節(jié)點(diǎn)(parent的父節(jié)點(diǎn))

紅黑樹(shù)的添加

從B樹(shù)中我們可以知道捐名,新元素必定是添加到葉子節(jié)點(diǎn)中,4階B樹(shù)的多有節(jié)點(diǎn)的元素個(gè)數(shù)都符合1\leq 3闹击,建議新添加的節(jié)點(diǎn)默認(rèn)為RED镶蹋,這樣能夠讓紅黑樹(shù)的性質(zhì)星空滿足(性質(zhì)1,2赏半,3贺归,5都滿足,就只有性質(zhì)4不一定滿足)断箫,另外如果添加的是根節(jié)點(diǎn)拂酣,直接染成BLACK即可

添加的所有情況(12種)

為什么是12種情況呢?因?yàn)樘砑釉囟际翘砑拥饺~子節(jié)點(diǎn)仲义,你可以想一下踱葛,葉子節(jié)點(diǎn)和父節(jié)點(diǎn)的分布情況有哪幾種丹莲,分別有紅黑紅,黑紅尸诽,紅黑甥材,黑如下圖:

節(jié)點(diǎn)分布圖

可以從圖中看到最后兩層的分布形式,基于這種情況下性含,我們可以有12種添加元素的方式洲赵,如下圖所展示

12種添加情況

前面已經(jīng)說(shuō)過(guò)了,如果添加的節(jié)點(diǎn)是紅色就滿足了4條性質(zhì)商蕴,接下來(lái)我們就是要滿足性質(zhì)4叠萍,從上述12種情形中,我們可以看到4種情形是滿足性質(zhì)4的(parent為BLACK)绪商,情形分別是情形5苛谷,情形10,情形11格郁,情形12腹殿;那么如果是這4種情況我們就是不用左任何額外處理的,如果是剩下的那8種(parent為RED)例书,我們就需要額外處理了

先處理情形7情形8锣尉,這兩種情況分別符合RR和LL的情況,處理的步驟是判斷uncle 如果不是RED决采,就執(zhí)行下面步驟:1.parent染成BLACK自沧,grand染成RED;2.grand進(jìn)行單旋轉(zhuǎn)操作树瞭,如果是LL拇厢,就右旋轉(zhuǎn),如果是RR晒喷,就左旋轉(zhuǎn)孝偎;

圖形展示如下:(情形7是RR,情形8是LL)

處理前
處理后

再處理情形6和情形9厨埋,分別符合RL和LR情況,處理方式:判定條件是uncle 不是RED捐顷,處理步驟1.自己染成BLACK荡陷,grand染成RED,2.進(jìn)行雙旋操作迅涮,LR:parent左旋轉(zhuǎn)废赞,grand右旋轉(zhuǎn),RL:parent右旋轉(zhuǎn)叮姑,grand左旋轉(zhuǎn)

上圖:


處理前


處理后

目前為止唉地,現(xiàn)在只剩下4種情況据悔,是情形1,情形2耘沼,情形3极颓,情形4

情形1:修復(fù)性質(zhì)4-上溢(LL)

判定條件:uncle是RED,parent群嗤,uncle染成BLACK菠隆,grand向上合并,然后grand染成RED狂秘,當(dāng)作是新添加的節(jié)點(diǎn)進(jìn)行處理骇径,如果grand向上合并時(shí)候,繼續(xù)發(fā)生了上溢者春,那么繼續(xù)按照上溢的方式處理破衔,若上溢持續(xù)到根節(jié)點(diǎn),只需將根節(jié)點(diǎn)染成BLACK钱烟;

第一次上溢處理

此時(shí)38是parent晰筛,55是grand,80是uncle忠售,根據(jù)前面說(shuō)的传惠,parent,uncle染成black,grand向上合并稻扬,染成RED

處理上溢

剩余3種情形上溢RR卦方,上溢LR,上溢RL泰佳,都是和上溢LL一樣的處理方式盼砍,這里不在展示了,接下來(lái)描述一下刪除

紅黑樹(shù)的刪除

刪除也是分為好幾種情況的逝她,下面一一說(shuō)明:

刪除-RED節(jié)點(diǎn)

直接刪除浇坐,不用做任何調(diào)整,因?yàn)閯h除RED不會(huì)紅黑樹(shù)的性質(zhì)黔宛,前面已經(jīng)說(shuō)過(guò)近刘,刪除的節(jié)點(diǎn)都是在葉子節(jié)點(diǎn);

刪除-BLACK節(jié)點(diǎn)

有3種情形臀晃,擁有2個(gè)RED子節(jié)點(diǎn)的BLACK節(jié)點(diǎn)觉渴,這種可以忽略,因?yàn)椴豢赡苤苯颖粍h除徽惋,因?yàn)榍懊嬲f(shuō)過(guò)刪除的都是子節(jié)點(diǎn)案淋,既然在有子節(jié)點(diǎn),肯定是在子節(jié)點(diǎn)中刪除险绘,然后子節(jié)點(diǎn)是紅色的話踢京,那就不用處理誉碴,所以這里需要處理的只有擁有一個(gè)RED子節(jié)點(diǎn)的BLACK節(jié)點(diǎn),和BLACK葉子節(jié)點(diǎn)瓣距,如下圖所示:

刪除BLACK的情況

上面說(shuō)過(guò)刪除擁有兩個(gè)RED子節(jié)點(diǎn)的BLACK不需要理會(huì)黔帕,也就是說(shuō)上面的情形1,不用我們?nèi)ス芾碇祭裕@里我們看一下情形2的情況先蹬屹,因?yàn)榍樾?可以拆分出多種情況

情形2的第一種情況:sibling為BLAKCK并且有RED子節(jié)點(diǎn)

sibling為BLAKCK有RED子節(jié)點(diǎn)

這種方式的處理可以理解成為:判定條件:用以替代的子節(jié)點(diǎn)是RED,將替代的子節(jié)點(diǎn)染成BLACK白华,即可以保持紅黑樹(shù)的性質(zhì)慨默,具體步驟可以立即成為,BLAKCK葉子節(jié)點(diǎn)被刪除后弧腥,會(huì)導(dǎo)致B樹(shù)節(jié)點(diǎn)下溢厦取,比如上面刪除的88,如果sibling至少有一個(gè)RED子節(jié)點(diǎn)管搪,首先根據(jù)相關(guān)旋轉(zhuǎn)條件進(jìn)行相應(yīng)旋轉(zhuǎn)操作虾攻,旋轉(zhuǎn)之后的中心節(jié)點(diǎn)繼承parent的顏色,旋轉(zhuǎn)之后的左右節(jié)點(diǎn)染為BLACK

情形2的第二種情況:sibling為BLAKCK沒(méi)有RED子節(jié)點(diǎn)

sibling為BLAKCK沒(méi)有RED子節(jié)點(diǎn)

這種情況的判定條件是:sibling沒(méi)有一個(gè)RED子節(jié)點(diǎn)更鲁,處理步驟是sibling霎箍,染成RED,parent染成BLACK就可以了澡为,如果parent是BLACK漂坏,下溢之后導(dǎo)致parent也下溢,這個(gè)時(shí)候只需要把parent當(dāng)作被刪除的節(jié)點(diǎn)處理就可以了(上圖下面一種情況)

情形2的第三種情況:sibling為RED

情形2的第三種情況:sibling為RED

如果sibling是RED媒至,sibling染成BLACK顶别,parent染成RED,進(jìn)行旋轉(zhuǎn)拒啰,于是情況就又回到sibling是BLACK的情況了驯绎,下面就按照前面的情況進(jìn)行處理就可以了

紅黑樹(shù)暫時(shí)先到這里吧,后續(xù)有學(xué)到新的我會(huì)再補(bǔ)充上來(lái)的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谋旦,一起剝皮案震驚了整個(gè)濱河市剩失,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌册着,老刑警劉巖拴孤,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異指蚜,居然都是意外死亡乞巧,警方通過(guò)查閱死者的電腦和手機(jī)涨椒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)摊鸡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绽媒,“玉大人,你說(shuō)我怎么就攤上這事免猾∈窃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵猎提,是天一觀的道長(zhǎng)获三。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锨苏,這世上最難降的妖魔是什么疙教? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮伞租,結(jié)果婚禮上贞谓,老公的妹妹穿的比我還像新娘。我一直安慰自己葵诈,他們只是感情好裸弦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著作喘,像睡著了一般理疙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泞坦,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天窖贤,我揣著相機(jī)與錄音,去河邊找鬼暇矫。 笑死主之,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的李根。 我是一名探鬼主播槽奕,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼房轿!你這毒婦竟也來(lái)了粤攒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤囱持,失蹤者是張志新(化名)和其女友劉穎夯接,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體纷妆,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盔几,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掩幢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逊拍。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡上鞠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出芯丧,到底是詐尸還是另有隱情芍阎,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布缨恒,位于F島的核電站谴咸,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏骗露。R本人自食惡果不足惜岭佳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望萧锉。 院中可真熱鬧驼唱,春花似錦、人聲如沸驹暑。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)优俘。三九已至京办,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帆焕,已是汗流浹背惭婿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叶雹,地道東北人财饥。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像折晦,于是被迫代替她去往敵國(guó)和親钥星。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355