红黑树的原理(持续更新)

红黑树的基本概念

红黑树(英语:Red–black tree)是一种自平衡二叉查找树。
维基百科红黑树:https://zh.wikipedia.org/wiki/%E7%BA%A2%E9%BB%91%E6%A0%91

红黑树的性质

红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

  1. 节点是红色或黑色。
  2. 根是黑色。
  3. 所有叶子都是黑色(叶子是NIL节点)。
  4. 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。)
  5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
  • 下面是一个具体的红黑树的图例:


    image.png

解释说明第五点:从13—8—1—6,不算13自己,该路径包含一个黑色节点。
13—8—11,不算13自己,该路径包含一个黑色节点。
13—17—15,不算13自己,该路径包含一个黑色节点。
13—17—25—22,不算13自己,该路径包含一个黑色节点。
13—17—25—27,不算13自己,该路径包含一个黑色节点。

红黑树的插入

  • 插入的节点有黑色和红色两种,一般我们插入的都是红色节点,因为性质五,从任意节点到其每个叶子的所有简单路径都包含相同数目的黑色节点,所以插入一个黑色节点会使所有把这个插入的节点当作叶子节点的路径,包含的黑色节点数目+1,从而破坏了红黑树,最主要的原因是,不好调整。如果插入的是红色节点,如果出现了违反红黑树性质的情况,可以通过简单的颜色调换(color flips)和树旋转来调整。
  • 颜色调换就是把节点的颜色由黑色变为红色,或是由红色变为黑色。
  • 树旋转分为两种:左旋右旋
    1.左旋(右子为轴,当前结点左旋)
    image.png
  • 动图:


    1550028201064011935.gif

    如图,以当前节点的右节点为轴,pivot,a,Y,b,c,的大小关系是:
    a<pivot<b<Y<c。调整前pivot的左子树a比pivot小,右子树Y比pivot大,调整后,Y的左子树pivot比Y小,右子树c比pivot大。相当于在原来的a<pivot<Y关系中,比自己大的Y替代了自己,而pivot在原来b<Y<c的关系中,替代了比Y小的b。最后因为b比pivot大,所以b成为了pivot的右子树。也就是调整后的样子。

2.右旋(左子为轴,当前结点右旋)


image.png
  • 动图:


    右旋.gif

    如图,以当前节点的左节点为轴,pivot,a,Y,b,c,的大小关系是:
    b<Y<c<pivot<a。调整前pivot的左子树Y比pivot小,右子树a比pivot大,调整后,Y的左子树b比Y小,右子树pivot比Y大。相当于在原来的Y<pivot<a关系中,比自己小的Y替代了自己,而pivot在原来b<Y<c的关系中,替代了比Y大的c。最后因为c比pivot小,所以c成为了pivot的左子树。也就是调整后的样子。


  • 接下来讨论一下插入红色节点之后,破坏了红黑树结构的几种情况:
    1.情况一,插入的红色节点为根节点,也就是,未插入时的红黑是为空树,这时候只需要把该节点颜色调换为黑色即可。
    image.png

2.情况二,插入节点的父节点为黑色,没有违反性质,也没有破坏红黑树的结构,不用做任何调整。
3.情况三,插入的父节点是红色

  • 插入节点的父节点是红色,叔叔节点为黑色:那么插入节点的祖父节点如果是红色,那么祖父节点和父节点为连续的两个红色节点,违反了性质四,在该节点插入之前,红黑树的结构都已经被破坏了。而且无论祖父节点是黑色还是红色,通过父节点或叔叔节点的任何路径都必定通过祖父节点,在这些路径上的黑节点数目没有改变,而父亲节点是红色,叔叔节点为黑色,就违反了性质五,在插入节点之前,该树也不是红黑树。

  • 所以插入节点的父节点如果是红色,那么叔叔节点也必定为红色,如图插入N节点


    image.png
  • 解决办法(重新构造成红黑树的解决办法):

① 将父节点和叔叔节点颜色调换由红色变为黑色
② 将祖父节点颜色调换,由原来的黑色变为红色

变换后如图:


image.png

变换后就转为了情况四
4.情况四,当前节点的父亲节点为红色节点,叔叔节点为黑色,当前节点是父亲节点的右子树。

  • 解决办法(重新构造成红黑树的解决办法):

将父节点作为当前节点做左旋

变换后如图:


image.png

变换后就转为了情况五
5.情况五,当前节点N(7)的父亲节点为红色节点,叔叔节点为黑色,当前节点是父亲节点的左子树。

  • 解决办法(重新构造成红黑树的解决办法):

① 将父节点颜色调换由红色变为黑色
② 将祖父节点颜色调换,由原来的黑色变为红色
③ 以祖父节点为当前节点做右旋

变换后如图:


image.png

持续更新,未完待续……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 1、红黑树介绍 红黑树又称R-B Tree,全称是Red-Black Tree,它是一种特殊的二叉查找树,红黑树的...
    文哥的学习日记阅读 9,851评论 1 35
  • 寻找红黑树的操作手册 前言 二叉树知识点回忆以及整理[https://www.jianshu.com/p/bd3c...
    静默加载阅读 667评论 0 1
  • 树(tree)的基本知识 一.定义 树是一种抽象数据类型,或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构...
    337b94dc718f阅读 7,235评论 3 42
  • 2019年5月24日 星期五 己亥年四月二十日 √静一致远 √智与权变 √勇以决断 √仁以取与 √强有所守 √礼尚...
    妈妈熊阅读 187评论 0 1
  • 人与人的相遇相识相知相处过程,起始阶段多是缘于偶然的缘分,之后的进展与持久则在于彼此认知的共识以及共识的有意扩大甚...
    山贼爷阅读 751评论 4 1