最详细的对红黑树性质理解

article/2025/9/21 0:58:01

红黑树的性质:

在了解红黑树之前,建议先去了解一下什么是二叉搜索树。
因为红黑树属于二叉搜索树特殊的分支,所以建议先去了解一下二叉搜索树。
二叉搜索树:https://blog.csdn.net/Falling_stars_/article/details/115536511

红黑树实例图
在这里插入图片描述
性质1:每个节点要么是黑色,要么是红色。
性质2:根节点只能是黑色。
性质3:每个叶子节点(NIL)是黑色。
性质4:每个红色节点的两个子节点一定都是黑色。不能有两个红色节点相连。
性质5:任意一节点到每个叶子节点的路径都包含数量相同黑结点。俗称:黑高
从性质5又可以得出:
性质5.1:如果一个节点存在黑子节点,那么该节点肯定有两个子节点

红黑树并不是一个完美平衡二叉搜索树,从图上可以看到,根节点P的左子树显然比右子树高,
但左子树和右子树的黑节点的层数是相等的,
即任意一个节点到每个叶子节点的路径都包含数量相同的黑节点(性质5)。
所以称红黑树这种平衡为黑色完美平衡

之所以红黑树能自然平衡,就是靠它的三种操作:左旋、右旋和变色
1.变色:节点的颜色由红变黑或由黑变红。
2.左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。
3.右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。

左旋动态图
在这里插入图片描述
左旋图示
在这里插入图片描述
右旋动态图
在这里插入图片描述

右旋图示
在这里插入图片描述
红黑树查找
其实红黑树查找与二叉搜索树的查找无差别。
在这里插入图片描述
红黑树插入
插入操作包括两部分:
1.查找插入的位置
2.插入后自平衡

注意:插入节点,必须为红色,因为红色的父节点(如果存在)为黑色节点时,红黑树的黑色平衡没有被破坏,不需要做自平衡操作。
但如果插入节点是黑色,那么插入位置所在的子树黑色节点总是多1,此时必须做自平衡。

如图:在这里插入图片描述

红黑树插入节点情景分析

情景1:红黑树为空树
直接把插入结点作为根节点就可以了
注意:根据红黑树性质2:根节点是黑色的。还需要把插入节点设置为黑色。

情景2:插入节点的Key已经存在
更新当前节点的值,为插入节点的值。也就是覆盖
在这里插入图片描述
情景3:插入节点的父节点为黑节点
由于插入的节点是红色的,当插入节点的父节点是黑色时,不会影响红黑树的平衡,直接插入无需做自平衡。
在这里插入图片描述
情景4:插入节点的父节点为红色
根据红黑树的性质2:根节点是黑色。
如果插入节点的父节点为红色节点,那么该父节点不可能为根节点,所以插入节点总是存在祖父节点(三代关系)。

根据性质4:每个红色节点的两个子节点一定是黑色的。
不能有两个红色节点相连。

此时会出现两种状态,如图
在这里插入图片描述
情景4.1:叔叔节点存在并且为红色节点
根据红黑树性质4:红色节点不能相连 ==》祖父节点肯定为黑色节点:
因为不可能同时存在两个相连的红色节点,那么此时该插入子树的红黑树层数的情况是:黑红红。显然处理方式是把其改为:红黑红
处理:
1.将F和V节点改为黑色
2.将P改为红色
3.将P设置为当前节点,进行后续处理
在这里插入图片描述
可以看到,将P设置为红色了,如果P的父节点是黑色,那么无需做处理;
但如果P的父节点是红色,则违反红黑树性质了,所以需要将P设置为当前节点,继续插入操作作自平衡平衡处理,直道平衡为止。

插入情景4.2:叔叔节点不存在或为黑节点,并且节点的父亲节点是祖父节点的左子节点
注意:单纯从插入来看,叔叔节点非红即空(NIL节点),否则破坏了红黑树性质5,此时路径会比其他路径多一个黑色节点。
在这里插入图片描述
插入情景4.2.1新插入节点,为其父节点的左子节点(LL红色情况)
在这里插入图片描述
处理:
1.变颜色:将F设置为黑色,将P设置为红色
2.对F节点进行右旋

在这里插入图片描述
情景4.2.2:新插入节点,为其父节点的右节点(LR红色情况)
在这里插入图片描述
处理:
1.对F进行左旋
2.将F设置为当前节点,得到LL红色情况
3.按照LL红色情况处理(1.变色 2.右旋P节点)
在这里插入图片描述
情景4.3:叔叔节点不存在或者为黑节点,并且插入节点的父亲节点是祖父节点的右子节点
在这里插入图片描述
情景4.3.1:新插入节点,为其父节点的右子节点(RR红色情况)
在这里插入图片描述
处理:
1.变色:将F设置为黑色,将P设置为红色
2.对P节点进行左旋
在这里插入图片描述
情景4.3.2:新插入节点,为其父节点的左子节点(RL红色情况)
在这里插入图片描述
处理:
1.对F进行右旋
2.将F设置为当前节点,得到RR红色情况
3.按照RR红色情况处理(1.变色 2.左旋P节点)
在这里插入图片描述

红黑树插入案例分析

字有点小,请自行放大观看
在这里插入图片描述


http://chatgpt.dhexx.cn/article/c8Pa2j9Y.shtml

相关文章

JDK1.8之后,HashMap转变红黑树

当链表长度大于8并且数组长度大于64时,才会转换为红黑树 根据源码注释: 1.TreeNodes占用空间是普通Nodes的两倍。 只有当bin(bin就是bucket-桶,即HashMap中hashCode值一样的元素保存的地方)包含足够多的节点时才会转成…

jdk1.8的HashMap中的红黑树插入,为什么是红黑树而不是AVL树

jdk1.8HashMap的源码 树节点 static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {TreeNode<K,V> parent; // red-black tree linksTreeNode<K,V> left;TreeNode<K,V> right;TreeNode<K,V> prev; // needed to unli…

浅谈红黑树

这篇文章的删除操作参考这篇博客博客地址 聊红黑树之前我想先来谈谈B树&#xff08;多路平衡查找树&#xff09;&#xff0c;为什么来聊这个东西呢&#xff0c;其实红黑树就是一个B树。了解B树后对红黑树的理解会比较有帮助。 首先是2、3、4节点。 红黑树中单个黑节点对应B树中…

红黑树的理解与代码实现

红黑树 我们知道对于二叉搜索树而言&#xff0c;无法保证树的平衡性&#xff0c;从而使得进行操作的时候时间复杂度在O(logn)与O(n)之间。这样是不稳定的。而2-3树则借助于3-结点和临时的4-结点&#xff0c;通过分解&#xff0c;解决了平衡问题。例如对于插入&#xff0c;在最终…

图解TreeMap的红黑树平衡操作fixAfterInsertion(),接着手撕红黑树添加节点

一、前言 啥也不想说&#xff0c;就卷、卷技术&#xff1b;手撕红黑树搞起。 1、红黑树简介 红黑树就是一种平衡的二叉查找树&#xff0c;其有五个特点&#xff1a; 1.每个节点要么是红⾊&#xff0c;要么是⿊⾊&#xff1b; 2. 根节点⼀定是⿊⾊的&#xff1b; 3. 每个叶⼦…

有人在jdk源码里下毒【class.newInstance() bug复现】

如图 在用反射的时候&#xff0c;发现这个方法被idea划横杠了 稍加思索后发现是这方法从jdk9开始弃用了&#xff0c;倒不影响使用&#xff0c;对象还是能正常射出来&#xff0c;就是看着很难受 &#xff08;最近刚把本地开发机从8升到11&#xff0c;难怪&#xff09; 说下我…

红黑树理解以及Java实现

红黑树本身并不复杂&#xff0c;只是在插入删除的时候情况比较多&#xff0c;如果强行记忆的话会显得比较困难&#xff0c;而且容易忘记。所以以前对红黑树一直没有很好的掌握。恰好这次借着复习数据结构的机会&#xff0c;静下心来仔细的学习了一下红黑树&#xff0c;并用Java…

Java 9 vs Java 8:引入模块化和JShell的全面升级

Java 9 是 Java 语言的一个重大版本升级&#xff0c;带来了许多新的特性和改进。 在本篇博客中&#xff0c;我将为您介绍 Java 9 的一些重要特性。 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; 目录 一、模块化二、JShell三…

HashMap 在 JDK 1.8 后新增的红黑树结构

读完本文你将了解到&#xff1a; 点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树…

epoll底层红黑树使用部分源码剖析:为什么使用红黑树以及如何使用红黑树

我们知道epoll的底层使用了红黑树来管理文件描述符&#xff0c;为什么会选择红黑树这种结构呢&#xff1f; 以下是个人理解&#xff1a; epoll和poll的一个很大的区别在于&#xff0c;poll每次调用时都会存在一个将pollfd结构体数组中的每个结构体元素从用户态向内核态中的一…

HashMap在jdk1.8为何引入了红黑树?

原创不易,麻烦点个关注,点个赞,谢谢各位。 二叉查找树 二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任…

从电路的角度理解特征阻抗

传输显得特征阻抗不是真实的电阻&#xff0c;微波技术课程会从波的角度描述特征阻抗&#xff0c;这次试图从电路的角度来理解 无损传输线是分布的L C 网络&#xff0c;假设是无限长传输线 从a,b两点看入的阻抗是相等的&#xff0c;所以可以简化成下图&#xff1a; 化简可得 这…

同轴电缆阻抗总结(电阻、阻抗、特性阻抗)

文章目录 同轴电缆电阻、阻抗、特性阻抗电阻阻抗&#xff08;Impedance&#xff09;特性阻抗 总结 同轴电缆 同轴电缆是一种电线及信号传输线&#xff0c;一般是由四层物料造成&#xff1a;最内里是一条导电铜线&#xff0c;线的外面有一层塑胶&#xff08;作绝缘体、电介质之…

传输线阻抗方程的推导

在传输线理论中&#xff0c;当一段特征阻抗为 Z 0 Z_0 Z0​ 的传输线的终端连接了一个阻抗为 Z L Z_L ZL​ 的负载时&#xff0c;看向这段传输线的输入阻抗 Z i n Z_{in} Zin​ 将不再是 Z 0 Z_0 Z0​。 传输线阻抗方程 (Transmission Line Impedance Equation) 就是计算…

PCB阻抗计算

阻抗匹配是指在能量传输时&#xff0c;要求负载阻抗要和传输线的特征阻抗相等&#xff0c;此时的传输不会产生反射&#xff0c;这表明所有能量都被负载吸收了。反之则在传输中有能量损失。在高速PCB设计中&#xff0c;阻抗的匹配与否关系到信号的质量优劣&#xff0c;下面简单介…

特征阻抗和阻抗匹配_没有诸如对象关系阻抗不匹配之类的东西

特征阻抗和阻抗匹配 过去十年来&#xff0c;ORM的许多批评都错了这一点&#xff0c;因为它不准确。 到本文结尾&#xff0c;我们将得出以下结论&#xff1a; 关系&#xff08;数据&#xff09;模型和面向对象的模型之间没有显着差异 如何得出这个结论&#xff1f; 继续阅读&a…

传输线特征阻抗计算

一直有很多人问我阻抗怎么计算的. 人家问多了,我想给大家整理个材料,于己于人都是个方便.如果大家还有什么问题或者文档有什么错误,欢迎讨论与指教! 在计算阻抗之前,我想很有必yi要理解这儿阻抗的意义 传输线阻抗的由来以及意义 传输线阻抗是从电报方程推导出来(具体可以查询微…

PCB特征阻抗计算

见教程&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1V4UbEoKfMD1bilwu-Qwdyg 密码&#xff1a;ml6t

射频特征阻抗

Characteris Impendance(特性阻抗&#xff0c;也称为‘特征阻抗’)是我们经常看到并使用自己的术语之一&#xff0c;但非常模糊且难以解释。以下是来自几个不同来源的Characteris Impendance(特性阻抗)的一些定义。 &#xff08;如果您检查10个不同的来源&#xff0c;您会看到1…

高速PCB的特征阻抗设计

我们在高速PCB设计当中,经常对高速信号线做特征阻抗控制来优化信号质量。那特征阻抗是什么东西呢? 1.传输线原理 介绍特征阻抗之前,我们复习下《信号完整性视频》介绍的传输线基本原理。如下图左边是低频电路采用集总参数的RLGC模型,右边高频电路采用分布参数的RLGC模型。…