热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

红黑树_红黑树的插入过程

篇首语:本文由编程笔记#小编为大家整理,主要介绍了红黑树的插入过程相关的知识,希望对你有一定的参考价值。 红黑树是一种自平衡的二叉查找树它具有以下5个性质:1、节点颜色必须是红色或者黑色2、根节点是黑

篇首语:本文由编程笔记#小编为大家整理,主要介绍了红黑树的插入过程相关的知识,希望对你有一定的参考价值。


红黑树是一种自平衡的二叉查找树

它具有以下5个性质:

1、节点颜色必须是红色或者黑色

2、根节点是黑色

3、每个叶子节点(NIL节点、空节点)是黑色的

4、每个红色节点的两个子节点都是黑色

5、从任一节点到每个叶子的所有路径都包含数目相同的黑色节点

假设我们插入这些数据:12   23    34   40  45   67    78   89   90  100  110  120   130   140  

1、插入12,12为根节点,根节点一定为黑;插入23,符合红黑树的基本性质,无需做出调整

技术图片

2、插入45

技术图片

 

 

 

 

 不满足红色节点一定有两个黑色子节点,对12 节点左旋,23变成根,颜色变为黑色,12原来为黑色,旋转后这条路径多了一个黑色节点,所以为了满足性质5,必须将其颜色换为红色

 技术图片

3、插入34,不满足红色节点一定有两个黑色子节点,所以将34的父节点和叔叔节点 涂成 黑色,祖父节点变成红色,但23是根,必须为黑色,所以如上图所示 23,12,45节点颜色为黑色

4、插入40

技术图片

 

 

技术图片

 

 

插入数据情况基本就是这样,总结一下:

1、如果插入的节点,父节点为技术图片,叔叔节点(插入节点的父节点的兄弟节点)为技术图片,那么 就要把父节点和叔叔节点涂成技术图片,祖父节点涂成技术图片(但如果是根节点涂成黑色)。

2、如果插入的节点,父节点为技术图片,父节点是祖父节点的右支,叔叔节点为技术图片,且

           (1)要插入的节点为父节点的右支,那么对其 祖父节点左旋。就相当于:

 技术图片

           (2)要插入的节点为父节点的左支,那么 对父节点先右旋,然后按照旋转后的位置重新进行规则判断,接着对其祖父节点进行左旋。

3、如果插入的节点,父节点为技术图片,父节点是祖父节点的左支,叔叔节点为技术图片,且

      (1)要插入的节点为父节点的左支,那么对其 祖父节点右旋。

      (2)要插入的节点为父节点的右支,那么 对父节点先左旋,然后按照旋转后的位置重新进行规则判断,接着对其祖父节点进行右旋。即:上图的插入40数据。(相当于如果是<,那么先左后右,如果是>,那么先右后左)


推荐阅读
author-avatar
优美rosner_704
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有