day10 红黑树

红黑树

红黑树(Red Black Tree)

红黑树也是一种自平衡的二叉搜索树,红黑树必须满足一下5条性质:

1.节点是RED或者BLCAK

2.根节点是BLACK

3.叶子节点(外部节点,空节点)都是BLACK

4.RED节点的子节点都是BLACK,RED节点的父节都是BLACK,从根节点到叶子节点的所有路径上不能有2个连续的RED节点

5.从任意一个节点到叶子节点的所有路径都包含相同数目的BLACK节点

请问下面这棵是红黑树么?

示例图

答案是不是的,因为不满足上面所说的性质5:从任意节点到叶子节点的所有路径都包含相同的BLACK节点,路径55->53-null,这条路径如果不包含null这个叶子节点的话,那么就只有两个BLACK节点,而其他的是有3个的BLACK节点

红黑树的等价变换

等价变换

红黑树和4阶B树(2-3-4树)具有等价性,BLACK节点与它的RED子节点融合在一起,形成一个B树节点,红黑树的BLACK节点个数与4阶B树的节点总个数相等

几个相关的专业名字

parent:父节点

sibling:兄弟节点

uncle:叔父节点(parent的兄弟节点)

grand:祖父节点(parent的父节点)

红黑树的添加

从B树中我们可以知道,新元素必定是添加到叶子节点中,4阶B树的多有节点的元素个数都符合1\leq 3,建议新添加的节点默认为RED,这样能够让红黑树的性质星空满足(性质1,2,3,5都满足,就只有性质4不一定满足),另外如果添加的是根节点,直接染成BLACK即可

添加的所有情况(12种)

为什么是12种情况呢?因为添加元素都是添加到叶子节点,你可以想一下,叶子节点和父节点的分布情况有哪几种,分别有红黑红,黑红,红黑,黑如下图:

节点分布图

可以从图中看到最后两层的分布形式,基于这种情况下,我们可以有12种添加元素的方式,如下图所展示

12种添加情况

前面已经说过了,如果添加的节点是红色就满足了4条性质,接下来我们就是要满足性质4,从上述12种情形中,我们可以看到4种情形是满足性质4的(parent为BLACK),情形分别是情形5,情形10,情形11,情形12;那么如果是这4种情况我们就是不用左任何额外处理的,如果是剩下的那8种(parent为RED),我们就需要额外处理了

先处理情形7情形8,这两种情况分别符合RR和LL的情况,处理的步骤是判断uncle 如果不是RED,就执行下面步骤:1.parent染成BLACK,grand染成RED;2.grand进行单旋转操作,如果是LL,就右旋转,如果是RR,就左旋转;

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

处理前
处理后

再处理情形6和情形9,分别符合RL和LR情况,处理方式:判定条件是uncle 不是RED,处理步骤1.自己染成BLACK,grand染成RED,2.进行双旋操作,LR:parent左旋转,grand右旋转,RL:parent右旋转,grand左旋转

上图:


处理前


处理后

目前为止,现在只剩下4种情况,是情形1,情形2,情形3,情形4

情形1:修复性质4-上溢(LL)

判定条件:uncle是RED,parent,uncle染成BLACK,grand向上合并,然后grand染成RED,当作是新添加的节点进行处理,如果grand向上合并时候,继续发生了上溢,那么继续按照上溢的方式处理,若上溢持续到根节点,只需将根节点染成BLACK;

第一次上溢处理

此时38是parent,55是grand,80是uncle,根据前面说的,parent,uncle染成black,grand向上合并,染成RED

处理上溢

剩余3种情形上溢RR,上溢LR,上溢RL,都是和上溢LL一样的处理方式,这里不在展示了,接下来描述一下删除

红黑树的删除

删除也是分为好几种情况的,下面一一说明:

删除-RED节点

直接删除,不用做任何调整,因为删除RED不会红黑树的性质,前面已经说过,删除的节点都是在叶子节点;

删除-BLACK节点

有3种情形,拥有2个RED子节点的BLACK节点,这种可以忽略,因为不可能直接被删除,因为前面说过删除的都是子节点,既然在有子节点,肯定是在子节点中删除,然后子节点是红色的话,那就不用处理,所以这里需要处理的只有拥有一个RED子节点的BLACK节点,和BLACK叶子节点,如下图所示:

删除BLACK的情况

上面说过删除拥有两个RED子节点的BLACK不需要理会,也就是说上面的情形1,不用我们去管理,这里我们看一下情形2的情况先,因为情形2可以拆分出多种情况

情形2的第一种情况:sibling为BLAKCK并且有RED子节点

sibling为BLAKCK有RED子节点

这种方式的处理可以理解成为:判定条件:用以替代的子节点是RED,将替代的子节点染成BLACK,即可以保持红黑树的性质,具体步骤可以立即成为,BLAKCK叶子节点被删除后,会导致B树节点下溢,比如上面删除的88,如果sibling至少有一个RED子节点,首先根据相关旋转条件进行相应旋转操作,旋转之后的中心节点继承parent的颜色,旋转之后的左右节点染为BLACK

情形2的第二种情况:sibling为BLAKCK没有RED子节点

sibling为BLAKCK没有RED子节点

这种情况的判定条件是:sibling没有一个RED子节点,处理步骤是sibling,染成RED,parent染成BLACK就可以了,如果parent是BLACK,下溢之后导致parent也下溢,这个时候只需要把parent当作被删除的节点处理就可以了(上图下面一种情况)

情形2的第三种情况:sibling为RED

情形2的第三种情况:sibling为RED

如果sibling是RED,sibling染成BLACK,parent染成RED,进行旋转,于是情况就又回到sibling是BLACK的情况了,下面就按照前面的情况进行处理就可以了

红黑树暂时先到这里吧,后续有学到新的我会再补充上来的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343