紅黑樹(2019-06-16)

1哥纫、定義

紅黑樹是每個(gè)節(jié)點(diǎn)都帶有顏色屬性的平衡二叉查找樹 镇眷,顏色為紅色或黑色波桩。除了二叉查找樹一般要求以外鹅巍,對(duì)于任何有效的紅黑樹我們?cè)黾恿巳缦碌念~外要求:
(1)節(jié)點(diǎn)是要么紅色或要么是黑色音同。
(2)根一定是黑色節(jié)點(diǎn)词爬。
(3)每個(gè)葉子節(jié)點(diǎn)都帶有兩個(gè)空的黑色節(jié)點(diǎn)(稱之為NIL節(jié)點(diǎn),它又被稱為黑哨兵)权均。
(4)每個(gè)紅色節(jié)點(diǎn)的兩個(gè)子節(jié)點(diǎn)都是黑色(或者說(shuō)從每個(gè)葉子到根的所有路徑上不能有兩個(gè)連續(xù)的紅色節(jié)點(diǎn))顿膨。
(5)從任一節(jié)點(diǎn)到它所能到達(dá)得葉子節(jié)點(diǎn)的所有簡(jiǎn)單路徑都包含相同數(shù)目的黑色節(jié)點(diǎn)。
如下圖


1.png

2叽赊、性質(zhì)

根節(jié)點(diǎn)到任意葉子節(jié)點(diǎn)的路徑長(zhǎng)度恋沃,最多相差一半。若樹存在最短路徑必指,則最短路徑上均為黑色節(jié)點(diǎn)囊咏,那么第五條性質(zhì)保證根節(jié)點(diǎn)到達(dá)最長(zhǎng)路徑與最短路徑所包含的黑色節(jié)點(diǎn)數(shù)目相同,若最短路徑長(zhǎng)為N塔橡,則最長(zhǎng)路徑M=N+紅色節(jié)點(diǎn)數(shù)目梅割,性質(zhì)4要求紅色節(jié)點(diǎn)必定不連續(xù),因此紅色節(jié)點(diǎn)數(shù)目最多為N葛家,則最長(zhǎng)路徑與最短路徑最多相差N户辞。

3、插入

3.1癞谒、插入節(jié)點(diǎn)的父節(jié)點(diǎn)為黑色

若待插入節(jié)點(diǎn)的父節(jié)點(diǎn)為黑色底燎,則直接插入節(jié)點(diǎn),并將插入的節(jié)點(diǎn)涂紅弹砚,插入結(jié)束双仍。父節(jié)點(diǎn)為黑色,插入紅色節(jié)點(diǎn)并不會(huì)使紅黑樹違背5條性質(zhì)迅栅。如圖


2.png

3.2殊校、插入節(jié)點(diǎn)的父節(jié)點(diǎn)為紅色,叔叔節(jié)點(diǎn)為黑色:

此種情形需要區(qū)分節(jié)點(diǎn)的插入位置读存,根據(jù)插入位置的不同進(jìn)行相應(yīng)的調(diào)整为流。此種情形共有四種:

3.2.1、父節(jié)點(diǎn)P為G左孩子让簿,插入位置為左孩子

1:插入后違背性質(zhì)4敬察,首先以祖父節(jié)點(diǎn)G為中心,執(zhí)行右旋操作尔当。


3.png

4.png

2:右旋操作結(jié)束莲祸,將父節(jié)點(diǎn)P涂黑色蹂安,祖父節(jié)點(diǎn)G涂紅色,調(diào)整完畢锐帜。


5.png

6.png

3.2.2田盈、父節(jié)點(diǎn)P為G左孩子,插入位置為右孩子

1:插入后違背性質(zhì)4缴阎,首先以父節(jié)點(diǎn)P為中心允瞧,執(zhí)行左旋操作。


7.png

8.png

2:左旋操作結(jié)束后蛮拔,情形與3.2.1相同述暂,進(jìn)行處理。

3.2.3建炫、父節(jié)點(diǎn)P為G右孩子畦韭,插入位置為右孩子

1:插入后違背性質(zhì)4,首先以祖父節(jié)點(diǎn)G為中心肛跌,執(zhí)行左旋操作艺配。


9.png

10.png

2:左旋操作結(jié)束,將父節(jié)點(diǎn)P涂黑色惋砂,祖父節(jié)點(diǎn)G涂紅色妒挎,調(diào)整完畢。


11.png

12.png

3.2.4西饵、父節(jié)點(diǎn)P為G右孩子酝掩,插入位置為左孩子

可參考3.2.2/3.2.3操作。

3.3眷柔、插入節(jié)點(diǎn)的父節(jié)點(diǎn)為紅色期虾,叔叔節(jié)點(diǎn)為紅色

此種情形根據(jù)插入位置的不同,分為兩種:

3.3.1驯嘱、插入位置為左子樹

13.png

14.png

15.png

3.3.2镶苞、插入位置為右子樹

16.png

17.png

18.png

祖父結(jié)點(diǎn)作為新插入的結(jié)點(diǎn)繼續(xù)向上迭代進(jìn)行平衡操作,在迭代時(shí)如果調(diào)整到根鞠评,則根為黑色茂蚓,跳出循環(huán)(否則繼續(xù)循環(huán),循環(huán)結(jié)束條件為當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn)顏色為黑色)剃幌,調(diào)整完畢聋涨。

4、應(yīng)用

(1)IO多路復(fù)用epoll的實(shí)現(xiàn)采用紅黑樹組織管理sockfd负乡,以支持快速的增刪改查.
(2)ngnix中,用紅黑樹管理timer,因?yàn)榧t黑樹是有序的,通過(guò)二分法可以很快的得到距離當(dāng)前最小的定時(shí)器.
(3) java中TreeMap牍白,jdk1.8的hashmap的實(shí)現(xiàn).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抖棘,隨后出現(xiàn)的幾起案子茂腥,更是在濱河造成了極大的恐慌狸涌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件最岗,死亡現(xiàn)場(chǎng)離奇詭異帕胆,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)般渡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門惶楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诊杆,你說(shuō)我怎么就攤上這事『温剑” “怎么了晨汹?”我有些...
    開(kāi)封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贷盲。 經(jīng)常有香客問(wèn)我淘这,道長(zhǎng),這世上最難降的妖魔是什么巩剖? 我笑而不...
    開(kāi)封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任铝穷,我火速辦了婚禮,結(jié)果婚禮上佳魔,老公的妹妹穿的比我還像新娘曙聂。我一直安慰自己,他們只是感情好鞠鲜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開(kāi)白布宁脊。 她就那樣靜靜地躺著,像睡著了一般贤姆。 火紅的嫁衣襯著肌膚如雪榆苞。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天霞捡,我揣著相機(jī)與錄音坐漏,去河邊找鬼。 笑死碧信,一個(gè)胖子當(dāng)著我的面吹牛赊琳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播音婶,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慨畸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼寸士!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起乃正,我...
    開(kāi)封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瓮具,失蹤者是張志新(化名)和其女友劉穎凡人,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體传睹,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡欧啤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年邢隧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冈在。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迫靖,死狀恐怖兴使,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情发魄,我是刑警寧澤,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布汰寓,位于F島的核電站苹粟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嵌削。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一找默、第九天 我趴在偏房一處隱蔽的房頂上張望惩激。 院中可真熱鬧风钻,春花似錦酒请、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)膏秫。三九已至,卻和暖如春缤削,著一層夾襖步出監(jiān)牢的瞬間亭敢,已是汗流浹背图筹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工远剩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扣溺,地道東北人瓜晤。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓锥余,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親痢掠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嘲恍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354