博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
红黑树学习笔记(2)-插入操作
阅读量:6574 次
发布时间:2019-06-24

本文共 778 字,大约阅读时间需要 2 分钟。

1 插入操作的第一步是将插入节点按照二叉查找树的规则插入到合适的位置,然后将插入节点置为红色。如下图所示,插入的节点为蓝色的4.

2 设插入的节点为$z$。如果之前是空树,那么直接将$z$置为黑色即可。下面的情况假设之前不是空树。那么插入之后,如果$z$的父节点的颜色为黑色,则本次插入直接结束,因为插入操作没有破坏树的所有性质。如果$z$的父节点的颜色为红色,那么破坏了(但是没有破坏),即红色节点的孩子不能是红色的。下面是这种情况下的调整方法。先假设$z$的父节点是$z$爷爷节点的左孩子(另外一种情况即$z$的父节点是$z$爷爷节点的右孩子跟这种情完全类似)。同时设$y$是$z$父节点的兄弟节点。在这些前提下分两种情况:

(1)$y$的颜色是红色:如下如左侧所示,这时候$z$的爷爷节点的颜色一定是黑色,因为$z$的父节点和叔叔节点都是红色,那么直接将父节点和叔叔节点$y$置为黑色,将爷爷节点置为红色,然后令$z=z的爷爷节点$,继续调整$z$。注意,这里的任何时候没有被破坏。

(2)$y$的颜色是黑色:这种情况下又分两种情况:

   i $z$是其父节点的右孩子:这时候,令$z=z的父节点$,然后进行,此时这种情况转换成了情况ii。如下图所示:

   ii $z$是其父节点的左孩子:这时候$z$的父节点是红色,$z$的爷爷节点是黑色(因为$z$的父节点是红色),现将$z$的父节点置为黑色,$z$的爷爷节点置为红色,到这一步破坏了,因为到节点$D$下面的叶子节点的路径上黑色节点减少了1(原来$CD$都是黑色,现在$C$变成红色),所以这时候右旋$z$的爷爷节点,即可使得不被破坏,而且这一步之后也没有被破坏了。这个过程如下图所示:

转载于:https://www.cnblogs.com/jianglangcaijin/p/6011524.html

你可能感兴趣的文章
spark shuffle:分区原理及相关的疑问
查看>>
mysql优化
查看>>
Gradle -help
查看>>
css3做的nav
查看>>
互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
查看>>
Intellij IDEA 2018.2 搭建Spring Boot 应用
查看>>
SNMP AGENT函数介绍
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23
查看>>
并发容器与框架——并发容器(一)
查看>>
学界 | 伯克利最新研究:用算法解决算法偏差?公平机器学习的延迟影响
查看>>
多文件上传示例源码(默认支持各种类型,包括图片)
查看>>
9.2. CentOS 区域设置
查看>>
命令行基本操作学习笔记(一)
查看>>
「试着读读 Vue 源代码」工程目录及本地运行(断点调试)
查看>>
Oracle——16用户、角色和权限
查看>>
从0实现NavigationController
查看>>
A Visual Git Reference
查看>>
Tomcat 关于表单提交数据量过大导致数据丢失的问题
查看>>