红黑树的特性

红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径]

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

当新添加一个节点到树中后,将其颜色置为red,遵循以下原则对整个树进行调整:

1、  当插入的节点的父节点为null,则将该节点颜色置为black。

2、  当插入节点的父节点颜色为black,不需要调整。

3、  当插入节点的父节点为red,其叔父节点亦为红色,则将其父亲节点和叔父节点置为black,同时将祖父节点置为red,将祖父节点设置为当前新增节点,重新按照从规则1开始判断。

4、  但插入节点的父亲节点为red,其叔父节点为black或null,则需要分多钟情况考虑。

a)         新增节点为父亲节点右孩子同时父亲节点是祖父节点的左孩子,则进行左旋,将父节点置为新节点,重新按照规则1进行判断;

b)         新增节点为父亲节点左孩子,同时父亲节点是租户节点的右孩子,则进行右旋,将父节点置为新节点,重新按照规则1进行判断;

5、  不满足上述所有条件,将父节点置为black,同时,将祖父节点置为red,进行以下两种情况判断。

a)         如果新增节点是父亲节点的左孩子,同时,父亲节点是祖父孩子的左孩子,则对祖父节点进行右旋

b)         其他情况,对祖父节点左旋。

通过以下序列来实现:35、75、65、56、78、29、41、37、38

第一步,首先加入35,只有根节点,按照规则1,将其颜色设置为black。

 红黑树的特性,红黑树的特性 随笔 第1张

 

第二步,添加75节点,由于75节点的值大于当前根节点的值35,因此需要添加到根节点右侧,根据规则2,其父亲节点为black,不需要调整。

 红黑树的特性,红黑树的特性 随笔 第2张

 

第三步,添加65节点,由于65大于35且小于75,因此,需要添加在75节点的左节点。根据规则4(a)规则进行调整,对父亲节点进行右旋,之后按照5(b),进行调整后,满足条件不需要再次调整。得到如下结果。

       红黑树的特性,红黑树的特性 随笔 第3张          红黑树的特性,红黑树的特性 随笔 第4张                     红黑树的特性,红黑树的特性 随笔 第5张

 

              

第三步,将56添加到现有的结果中,需要对先按照规则3进行调整,之后按照规则1调整,得到如下结果。

  红黑树的特性,红黑树的特性 随笔 第6张                红黑树的特性,红黑树的特性 随笔 第7张              红黑树的特性,红黑树的特性 随笔 第8张

 

 

 

第四步,将78添加到现有的树中,为75的右节点,满足条件2不需要进行调整。

 红黑树的特性,红黑树的特性 随笔 第9张

 

第五步,将29添加的树中。满足条件2不需要进行调整。

 红黑树的特性,红黑树的特性 随笔 第10张

 

第六步。将41添加的树中,按照规则3对其进行颜色调整,之后在按照规则2进行调整,满足条件。

  红黑树的特性,红黑树的特性 随笔 第11张                 红黑树的特性,红黑树的特性 随笔 第12张

 

 

第七步,将37添加到树中,需要进行5(b)调整。

  红黑树的特性,红黑树的特性 随笔 第13张             红黑树的特性,红黑树的特性 随笔 第14张

 

 

第八步,将38添加到树中,按照条件3进行调整,将37和56置black,同时,将41置为red,将41节点置为当前节点重新判断;之后按照4(a)进行调整,将父节点35置为新节点,继续判断;按照5(a)进行最后调整,满足条件。

   红黑树的特性,红黑树的特性 随笔 第15张                   红黑树的特性,红黑树的特性 随笔 第16张                              红黑树的特性,红黑树的特性 随笔 第17张                         红黑树的特性,红黑树的特性 随笔 第18张

红黑树在线生成链接:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

本文转载自 https://www.cnblogs.com/woniu4/p/8086707.html

,

红黑树的特性:
(1)每个节点或者是黑色,或者是红色。
(2)根节点是黑色。
(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
(4)如果一个节点是红色的,则它的子节点必须是黑色的。
(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径]

 

当新添加一个节点到树中后,将其颜色置为red,遵循以下原则对整个树进行调整:

1、  当插入的节点的父节点为null,则将该节点颜色置为black。

2、  当插入节点的父节点颜色为black,不需要调整。

3、  当插入节点的父节点为red,其叔父节点亦为红色,则将其父亲节点和叔父节点置为black,同时将祖父节点置为red,将祖父节点设置为当前新增节点,重新按照从规则1开始判断。

4、  但插入节点的父亲节点为red,其叔父节点为black或null,则需要分多钟情况考虑。

a)         新增节点为父亲节点右孩子同时父亲节点是祖父节点的左孩子,则进行左旋,将父节点置为新节点,重新按照规则1进行判断;

b)         新增节点为父亲节点左孩子,同时父亲节点是租户节点的右孩子,则进行右旋,将父节点置为新节点,重新按照规则1进行判断;

5、  不满足上述所有条件,将父节点置为black,同时,将祖父节点置为red,进行以下两种情况判断。

a)         如果新增节点是父亲节点的左孩子,同时,父亲节点是祖父孩子的左孩子,则对祖父节点进行右旋

b)         其他情况,对祖父节点左旋。

通过以下序列来实现:35、75、65、56、78、29、41、37、38

第一步,首先加入35,只有根节点,按照规则1,将其颜色设置为black。

 红黑树的特性,红黑树的特性 随笔 第19张

 

第二步,添加75节点,由于75节点的值大于当前根节点的值35,因此需要添加到根节点右侧,根据规则2,其父亲节点为black,不需要调整。

 红黑树的特性,红黑树的特性 随笔 第20张

 

第三步,添加65节点,由于65大于35且小于75,因此,需要添加在75节点的左节点。根据规则4(a)规则进行调整,对父亲节点进行右旋,之后按照5(b),进行调整后,满足条件不需要再次调整。得到如下结果。

       红黑树的特性,红黑树的特性 随笔 第21张          红黑树的特性,红黑树的特性 随笔 第22张                     红黑树的特性,红黑树的特性 随笔 第23张

 

              

第三步,将56添加到现有的结果中,需要对先按照规则3进行调整,之后按照规则1调整,得到如下结果。

  红黑树的特性,红黑树的特性 随笔 第24张                红黑树的特性,红黑树的特性 随笔 第25张              红黑树的特性,红黑树的特性 随笔 第26张

 

 

 

第四步,将78添加到现有的树中,为75的右节点,满足条件2不需要进行调整。

 红黑树的特性,红黑树的特性 随笔 第27张

 

第五步,将29添加的树中。满足条件2不需要进行调整。

 红黑树的特性,红黑树的特性 随笔 第28张

 

第六步。将41添加的树中,按照规则3对其进行颜色调整,之后在按照规则2进行调整,满足条件。

  红黑树的特性,红黑树的特性 随笔 第29张                 红黑树的特性,红黑树的特性 随笔 第30张

 

 

第七步,将37添加到树中,需要进行5(b)调整。

  红黑树的特性,红黑树的特性 随笔 第31张             红黑树的特性,红黑树的特性 随笔 第32张

 

 

第八步,将38添加到树中,按照条件3进行调整,将37和56置black,同时,将41置为red,将41节点置为当前节点重新判断;之后按照4(a)进行调整,将父节点35置为新节点,继续判断;按照5(a)进行最后调整,满足条件。

   红黑树的特性,红黑树的特性 随笔 第33张                   红黑树的特性,红黑树的特性 随笔 第34张                              红黑树的特性,红黑树的特性 随笔 第35张                         红黑树的特性,红黑树的特性 随笔 第36张

红黑树在线生成链接:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

本文转载自 https://www.cnblogs.com/woniu4/p/8086707.html

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄