红黑树

【C++详解】——红黑树 本文介绍了红黑树的概念、性质,详细解释了红黑树插入节点的过程。 阅读详情

红黑树

红黑树(英语:Red–black tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型用途是实现关联数组。它在1972年由鲁道夫·贝尔发明,被称为"对称二叉B树",它现代的名字源于Leo J. Guibas和Robert Sedgewick于1978年写的一篇论文。红黑树的结构复杂,但它的操作有着良好的最坏情况运行时间,并且在实践中高效

定义

  • 节点是红色或黑色
  • 根是黑色
  • 所有叶子都是黑色(叶子是NIL节点)
  • 每个红色节点必须有两个黑色的子节点(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点

自平衡操作

  • 变色:节点的颜色由红变黑或者由黑变红
    左旋
    左旋:以某个节点为旋转节点,其右子节点变为旋转节点的父节点,右子节点的左子节点变为旋转节点的右子节点,左子节点保持不变
    右旋
    右旋:以某个节点为旋转节点,其左子节点变为旋转节点的父节点,左子节点的右子节点变为旋转节点的左子节点,右子节点保持不变

插入操作的平衡调整

红黑树规定,插入的节点必须是红色的。关于插入操作的平衡调整,有两种特殊情况,非常好处理:

  • 如果插入节点的父节点是黑色的,那我们什么都不用做,它仍然满足红黑树的定义。

  • 如果插入的节点是根节点,那我们直接改变它的颜色,把它变成黑色就可以了。

除此之外,其他情况会违背红黑树的性质,于是需要进行调整。新节点插入之后,如果红黑树的平衡被打破了,那一般会有下面3种情况:

正在处理的节点为X丶父节点为P丶叔叔节点为S丶祖父节点为G丶Hx代表其子树的BH(黑高,如H2,即黑高为2)

CASE1:如果正在处理的节点是X,它的叔叔节点Y是红色

在这里插入图片描述

  • 将父节点P丶叔叔节点Y的颜色都设置为黑色
  • 将祖父节点G的颜色设置成红色
  • 正在处理的节点X回溯至祖父节点G(正在处理的节点就是G了,继续调整)

分析:G为红色,可能违背红黑树的性质,需要继续调整(如果G为根节点,则把G的颜色设置为黑色,即满足红黑树的性质,调整结束,此时整个红黑树的BH增加1,这是唯一增加整个红黑树的BH的情形)

CASE2:如果正在处理的节点是X,它的叔叔节点Y是黑色,X是其父节点P的右子节点

在这里插入图片描述

  • 围绕父节点P左旋
  • 把X指向P(即P变成了正在处理的节点)
  • 跳到CASE3

分析:P丶X的关系仍然违背了红黑树的性质,需要继续调整

CASE3:如果正在处理的节点是X,它的叔叔节点Y是黑色,X是其父节点P的左子节点

在这里插入图片描述

  • 将父节点P的颜色设置为黑色,祖父节点G的颜色设置为红色
  • 围绕祖父节点右旋
  • 调整结束

分析:最后满足红黑树的性质,调整结束

删除操作的平衡调整

红黑树的删除操作的平衡调整要比插入的相对难点。不过原理类似,我们仍然根据正在处理的节点与周围的节点分布特点,来进行一定规则的调整。

正在处理的节点为X丶父节点P丶兄弟节点S丶左侄LN丶右侄RN丶Hx代表其子树的BH
下面正在处理的节点X均为父节点P的左孩子,如果是右孩子,则为镜像操作

CASE1:如果正在处理的节点是X,它的兄弟节点S是红色

在这里插入图片描述

  • 将兄弟节点的颜色设置为黑色
  • 将父节点的颜色色泽为红色
  • 围绕父节点P左旋,操作后LN变成新的兄弟节点

分析:X的BH比LN的BH少1,即违背了红黑树的性质,继续调整

CASE2:如果正在处理的节点是X,它的兄弟节点S丶兄弟节点的左右子节点均为黑色
2-1:父节点P是黑色

在这里插入图片描述

  • 将兄弟节点S的颜色设置为红色
  • 正在处理的节点X回溯至父节点P(正在处理的节点就是P了,继续调整)

分析:调整后P的黑高减少了1,即会整个红黑树的的每个节点到达其可达叶子节点的所有路径,包含的黑色节点的数目不同,这违背了红黑树的性质,需要继续调整(若P为根节点的,则执行该步骤会引起BH的减少,这是唯一减小整个红黑树的BH)

2-2:父节点P是红色

在这里插入图片描述

  • 将兄弟节点S的颜色设置为红色
  • 将父节点P的颜色设置为黑色

分析:在父节点没有变色前,其分析和case 2-1是一致的,父节点变色之后,P减少的BH就补回来了,即满足所有性质,调整结束

CASE3:如果正在处理的节点是X,它的兄弟节点S是黑色,S的左子节点LN为红色,右子节点RN为黑色

在这里插入图片描述

  • 将左侄节点LN的颜色设置为黑色
  • 将兄弟节点S的颜色设置为红色
  • 围绕兄弟节点S右旋
  • S指向LN
  • 跳到CASE4

分析:X的BH仍然比LN的BH少1,即继续调整

CASE4:如果正在处理的节点是X,它的兄弟节点S是黑色,父节点P可红可黑,S的右子节点RN为黑色
4-1:LN为红色

在这里插入图片描述

  • 将兄弟节点S的颜色设置为与父节点P的颜色相同
  • 将父节点P的颜色设置为黑色
  • 将S的右子节点RN的颜色设置为黑
  • 围绕父节点P左旋
  • X指向根节点

分析:调整后满足红黑树的性质,调整结束

4-2:LN为黑色

在这里插入图片描述

  • 将兄弟节点S的颜色设置为与父节点P的颜色相同
  • 将父节点P的颜色设置为黑色
  • 将S的右子节点RN的颜色设置为黑
  • 围绕父节点P左旋
  • X指向根节点

分析:调整后满足红黑树的性质,调整结束

【树形结构】红黑树 {概念及性质;红黑树的结构;带头结点的红黑树;红黑树的实现;红黑树插入操作详细解释;红黑树的验证} 阅读详情

相关推荐

个人关于红黑树的理解

目录   红黑树(red-black-tree) 一.红黑树的定义和性质 二.红黑树的结构 三.输出一颗红黑树 四.查询红黑树 查找 查找最大关键字元素和最小关键字元素 查找前驱和后继 五.※插入和删除 插入 删除 六.完整代码 红黑树(red-black-tree) 一.红黑树的定义和性质 红黑树是一种二叉查找树,在每个结点上增加一个存储位表示结点的颜色,,可以是...

brandong 4490

2022鹏城杯web

2022鹏城杯web

羽的博客 9054

红黑树解析

写在前面:我是「且听风吟」,目前是某上市游戏公司的大数据开发工程师,热爱大数据开源技术,喜欢分享自己的所学所悟,现阶段正在从头梳理大数据体系的知识,以后将会把时间重点放在Spark和Flink上面。 如果你也对大数据感兴趣,希望在这个行业一展拳脚。欢迎关注我,我们一起努力,一起学习。博客地址:https://ropledata.blog.youkuaiyun.com 博客的名字来源于:且听风吟,静待花开。也符合我对技术的看法,想要真正掌握一门技术就需要厚积薄发的毅力,同时保持乐观的心态。 你只管努力,剩下的交给.

静待花开 2231

【数据结构】史上最好理解的红黑树讲解,让你彻底搞懂红黑树

狂肝半个月的学习笔记,最通俗易懂的红黑树讲解。带你快速掌握红黑树~

小七的博客 29万+

树 —— 红黑树

源代码地址:https://github.com/Zheng-Wenkai/DataStructure.git 一,红黑树的介绍 1. 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 2. 在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(logn)。

starter_____的博客 2388

SPI模式下的SD卡读写,为什么你的数据总出错?详解时序与状态机避坑指南

本文深入探讨SPI模式下SD卡读写数据出错的根本原因,提供时序优化与状态机设计的实战指南。针对时钟周期计数、状态机跳转和忙检测等核心问题,详解命令时序细节、状态机同步策略及高级避坑技巧,帮助开发者提升SD卡在SPI模式下的稳定性和性能。

weixin_30514745的博客 263

红黑树介绍

红黑树一、红黑树的概念红黑树的性质红黑树节点的定义红黑树结构二、使用步骤1.引入库2.读入数据总结 一、红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 红黑树的性质 每个结点不是红色就是黑色 根节点是黑色的 如果一个节点是红色的,则它的两个孩子结点是黑色的 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数

mz474920631的博客 4万+

即梦 AI 全功能零基础详细教程(纯技术版)

即梦 AI 是一款多模态 AI 生成工具,主打文本生成视频、图片生成视频、角色一致性生成、音画同步等核心功能,依托自研 AI 视觉模型,实现从文本 / 图片 / 音频素材输入,到高清视频、图像内容输出的全流程 AI 创作,支持短视频、短剧、创意素材等多场景创作,具备操作门槛低、生成效率高、画面可控性强的技术特点。@为工具内置引用指令,作用是锁定指定素材 / 角色,强制 AI 按照该素材的核心特征生成内容,无额外付费、解锁要求,免费使用。剧本拆分:将短剧拆分为单镜头(15 秒内 / 个)

2501_92061023的博客 5848

红黑树(超详解)

上一篇文章我们讲了AVL树,但是AVL树只是一个过渡,我们实际当中用的更多另外一颗树还是红黑树.也不能说红黑树就是AVL树的改进,它是用另外一种方式来控制.这棵树更抽象一些,下一步我们来看一下.

庖丁解牛,恢恢乎游刃有余 1694

Dify工作流自动化:如何用Trae AI助手10倍提升你的开发效率(含避坑指南)

本文详细介绍了如何利用Trae AI助手自动化生成Dify工作流,实现开发效率的10倍提升。通过构建DSL示例库、精准需求描述和四步实战法,开发者可将重复的配置工作交给AI,快速生成可运行的工作流,并提供了关键的避坑指南。

weixin_29062865的博客 371

CloudCompare里那个CSF地面滤波插件,到底怎么用?手把手教你分离点云里的地面

本文详细介绍了如何在CloudCompare中使用CSF地面滤波插件分离点云中的地面数据。通过解析布料模拟滤波算法的核心参数,如布料刚度和网格分辨率,并提供不同地形(城市、丘陵、山地)的适配策略,帮助用户高效处理复杂点云数据。文章还包含实战案例和优化技巧,确保滤波结果的精度和可靠性。

weixin_42548708的博客 221

【C++】红黑树

因为每个节点都存在颜色,并且不为黑色就为红色,所以我们可以定义一个表示颜色的枚举常量。红黑树依旧是三叉链。

bushibrnxiaohaij的博客 2964

从实习生到独立上手:我是如何用海思PQTool搞定IPC图像调试的

本文分享了从实习生到独立使用海思PQTool进行IPC图像调试的成长历程。通过工具搭建、核心参数调整和实战案例,详细介绍了如何高效解决图像质量问题,特别强调了ISP调试中的关键参数和实用技巧,适合刚入门的图像调试工程师参考。

weixin_33756596的博客 312

红黑树原理详解

   二叉查找树由于在频繁的动态更新过程中,可能会出现树的高度远大于 log2n的情况,所以就会导致各个操作效率下降,最坏的情况下就会退化为链表,变为O(n).很明显,想要解决这个问题,有效的一种办法就是使得树的高度不要差很多,也就是平衡它.     最先发明的平衡二叉查找树是AVL树,(它严格符合平衡二叉查找树的定义,即任何节点的左右子树高度相差不超过 1,是一种高度平衡的二叉查找树。)但是在...

Tattoo的博客 3万+

DySAT+: Enhancing Dynamic Graph Representation Learning with Multi-Head Self-Attention and Temporal-

本文深入探讨了DySAT+模型在动态图表示学习中的创新应用,通过多头时空注意力机制和层级信息融合策略,有效解决了动态图数据中的时间维度信息捕捉和结构演变动态适应问题。该模型在社交网络异常检测和金融交易网络分析等场景中表现出色,显著提升了预测准确率和响应速度。

weixin_29035405的博客 336

电子元器件-接口电路篇:RS-232、RS485/422、I2C、SPI、USB、网口

以上规定说明了RS-232C 标准对逻辑电平的定义。对于数据(信息码):逻辑“1”的传输的电平为-3V~-15V,逻辑“0”传输的电平为+3V~+15V;对于控制信号;接通状态(ON)即信号有效的电平为+3V~+15V,断开状态(OFF)即信号无效的电平为-3V~-15V,也就是当传输电平的绝对值大于3V 时,电路可以有效地检查出来;

qq_60226558的博客 890

【C++】————红黑树

RED,BLACK, _kv(kv){}private:_left、_right 和 _parent 分别指向节点的左子节点、右子节点和父节点。_kv 是一个 pair,存储节点的键和值。_col 表示节点的颜色,可以是 RED 或 BLACK。接收一个 pair 作为参数,初始化节点的键值对,并将节点的颜色初始化为 RED。其他指针成员初始化为 nullptr。

bhbcdxb123的博客 2166

YOLOv8独家原创改进:原创自研 | 自研独家创新DSAM注意力 ,基于BiLevelRoutingAttention注意力升级

提出新颖的注意力DSAM(Deformable Bi-level SpatialAttention Module),创新度极佳,适合科研创新,效果秒杀CBAM,Channel Attention+Spartial Attention升级为新颖的Deformable Bi-level Attention+Spartial Attention

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1515

C++——红黑树

C++之红黑树板块讲解

dongxue727504的博客 3277

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C++中红黑树的实现 -- 红黑树的概念,红黑树的规则,红黑树插入时的情况分析,红黑树的实现,红黑树的查找,红黑树的验证

红黑树是一种自平衡二叉搜索树,通过颜色约束确保最长路径不超过最短路径的两倍。其核心规则包括:根节点为黑色、红色节点不能连续、每条路径黑色节点数相同。插入操作涉及变色和旋转两种调整方式,根据叔叔节点颜色分为不同处理情况。与AVL树相比,红黑树平衡要求较宽松,旋转次数更少,但查找效率相近(O(logN))。本文详细介绍了红黑树的结构定义、插入逻辑(包括单旋和双旋场景)、验证方法,并提供了与AVL树的性能对比测试代码,显示两者在百万级数据下的操作耗时相当。

CSQCSQCC的博客 1614

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

红黑树系列1——红黑树的建立

原创码字不易,转载请注明出处,谢谢~ 红黑树系列2——红黑树的删除(码字中,待发表) 红黑树系列3——红黑树的应用(码字中,待发表) 红黑树系列4——红黑树的代码实现(码代码中,待发表) 红黑树动态建立,删除网站(强强强强烈推荐,根据网页上自己构建和删除几遍红黑树,比看文章有用太多太多):https://www.cs.usfca.edu/~galles/visualization/RedBlack.html 目录 一、红黑树的建立 1、建立红黑树 例子1、解决连续右右红色节点 例子2、解决

Bob的博客 2831

C++之红黑树

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 4.2.2 红黑树的性质 1. 每个结点不是红色就是黑色 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个孩子结点是黑色的,但是没有连续的红节点 4. 对于每个结点,从该结点到其所有后代叶结点的简单路径...

cls的博客 2398

【红黑树】都这样讲了,不会还有人不会红黑树吧

我们在前面学习过二叉树,而二叉树有被简单的分为普通二叉树,二叉搜索树,完全二叉树,二叉平衡树等,在二叉搜索树中包含有 AVL树,红黑树。博主在以前的文章中写过AVL树的相关内容,有兴趣的读者可以去康康,直接甩链接(124条消息) 【数据结构高阶】终于有人把AVL树给说清了_小小怪下士~的博客-优快云博客我们学习过AVL树的同学们都知道,AVL树是一个绝对平衡的二叉树,所谓的绝对平衡说的就是一个节点的左右子树的高度之差的绝对值是不能超过1的,我们同时也知道这个。

qq_54883034的博客 4123
上一篇: 栈帧结构
amyacker
博客等级 码龄9年 2粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值