红黑树

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

红黑树和AVL树一样,也是一种平衡二叉树,红黑树是满足下列要求的二叉搜索树:

1.每个节点不是红色就是黑色
2.根节点为黑色
3.如果节点为红,其子节点必须为黑
4.任一节点至NULL(树尾端)的任何路径,所含之黑节点树相同

NOTE:
根据4,新增节点必须为红;根据3,新增节点之父节点必须为黑。

红黑树的分析

一、红黑二叉查找树
红黑树的出现功归于2_3查找树,红黑树和2_3查找树完全是等价的,但是2_3树的原理,插入过程比红黑树理解起来要容易的多,所以先学习2_3查找树然后从2_3查找树过渡到红黑树是一个更加科学的学习方式,不知道2_3查找树的同学不妨先去看我的这篇:2_3查找树

红黑二叉查找树完全由2_3查找树演变而来,2_3查找树更容易理解,但是对于很多编程语言来说,实现起来很难,所以发展出来了红黑树。

红黑二叉查找树背后的基本思想是用标准的二叉查找树(完全由2-结点构成)和一些额外的信息(替换3-结点)来表示2-3树。我们将书中的链接分为两种类型:红链接将两个2-结点连接起来构成一个3-结点,黑链接则是2-3树中的普通链接。确切的说,我们将3-结点表示为由一条左斜的红色链接(两个2-结点其中之一是另一个的左子结点)。
这里写图片描述
对于任意的2-3树,只要对结点进行转换,我们都可以立即派生出一棵对应的二叉查找树。我们将用这种方式表示2-3树的二叉查找树称为红黑二叉查找树(简称红黑树)。

红黑树的另一种定义是含有红黑链接并满足下列条件的二叉查找树:
1、红链接均为左链接。
2、没有任何一个节点同时和两个红链接相连。
3、该树是完美黑色平衡的,即任意空链接到根结点的路径上的黑链接数量相同。

我们根据我们重新理解的红黑二叉查找树来看看我们一开始对于红黑树下的定义:
1、每个结点不是红色就是黑色,这个很自然,2-3查找树中的所有结点不是2-结点就是3-结点。
2、根结点为黑色,红黑树中的红结点是指对应的2-3查找树中红色链接所指向的那个结点,也即是就父结点和子结点之间的链接是红色链接,那么这个子结点就是红结点,因为根结点没有父结点所以自然为黑结点。
3、如果结点为红,其子结点肯定为黑,将红黑树转换为2-3查找树,红黑树中的红结点和其父结点就构成了2-3查找树中的3-结点,如果一个结点为红,并且它的子结点也为红,那么这个结点和它的子结点构成了一个3-结点,并且这个结点和它的父结点也构成了一个3-结点,这时在2-3查找树中就会出现一个4-结点,不符合2-3结点的特点。
4、任一结点至NULL(树尾端)的任何路径,所含之黑结点数相同
这里写图片描述

红黑树既是二叉查找树,也是2-3树,因此具有这两个算法的优点:二叉查找树的简洁高效的查找方法和2-3树中高效的平衡插入算法。

二、红黑树插入中要用到的的基本操作
红黑树的插入操作要用到的最主要的基本操作就是左旋转和右旋转:
左旋转就是将红色的右链接转化为左链接,右旋转就是将将一个红色左链接转换为一个红色右链接。
这里写图片描述

三、红黑树的插入

向2-结点中插入新键

向一棵只含有一个2-结点的红黑树中插入一个新键有两种可能:
1、新键小于老键:只需要新增一个红色结点即可,新的红黑树和单个3-结点完全等价。
2、新键大于老键:这时候新增加的红色结点就会产生一条红色的右链接,需要使用root = rotateLeft(root);来将其旋转为红色左链接并修正根结点的链接,这样插入操作才算完成;
这两种情况的结果都是会得到一棵和单个3-结点等价的红黑树,其中含有两个键,一条红链接,树的黑链接高度为1。

向树底部的2-结点插入新键

向一棵红黑树中插入一个新键会在树的底部新增一个结点,但总是用红链接将新结点和它的父结点相连。
如果它的父结点是一个2-结点,那么刚才讨论的两种处理方法仍然适用。
如果指向新结点的是父结点的左链接,那么父结点就直接成为了一个3-结点;
如果指向新结点的是父结点的右链接,那么这就是一个错误的3-结点,但一次左旋转就能够修正它。如下图:
这里写图片描述

向一棵双键树(即一个3-结点)中插入新键

这种情况会产生三种子情况:新键小于树中的两个键,在两者之间,或是大于树中的两个键。每种情况都会产生一个同时链接到两条红链接的结点,我们的目标就是修正这一点。
1、如果新键大于原树中的两个键:那新键就会被连接到3-结点的右链接,此时树是平衡的,根结点为中间大小的键,它有两条红链接分别和较小和较大的结点相连。如果我们将两条链接的颜色都由红变黑,那么我们就得到了一棵由三个结点组成、高为2的平衡树,它正好对应一棵2-3树。
2、如果新键小于原树中的两个键,它会被连接到最左边的空链接,这样就产生了两条连续的红链接,此时我们只需要将上层的红链接右旋转即可得到第一种情况(中值键为根结点并和其他两个结点用红链接相连)。
3、如果新键介于原树中的两个键之间,这也会产生两条连续的红链接,一条红色左链接一条红色右链接,我们只需要将下层的红链接左旋转即可得到第二种情况(两条连续的红色左链接 )
这里写图片描述

向树底部的3-结点中插入新键

现在假设我们需要在树的底部的一个3-结点下加入一个新结点。前面讨论过的三种情况都会出现。如下图所示:
指向新结点的链接可能是3-结点的右链接(此时我们只需要转换颜色即可),
或是左链接(此时我们需要进行右旋转后再转换颜色),
或是中链接(此时我们需要先左旋转下层链接然后右旋转上层链接,最后再转换颜色)。

和双键树中的3-结点插入不同,向树底部的3-结点中插入新键时,颜色转换会使得中结点的链接变红,相当于将他送入了父结点。这意味着在父结点中继续插入一个新键,这是我们就需要使用相同的办法上溯解决这个问题。
将红链接在树中向上传递
在沿着插入点到根结点的路径向上移动时所经过的每个节点中顺序完成以下操作,我们就能完成插入操作:

如果右子结点是红色的而左子结点是黑色的,进行左旋转;
如果左子结点是红色的且它的左子结点也是红色的,进行右旋转;
如果左右子节点均为红色,进行颜色转换。

这里写图片描述

实现

红黑树的插入算法:
这里写图片描述

红黑树的插入轨迹:
这里写图片描述

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

相关推荐

红黑树解析

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

静待花开 2231

关联式容器之RB-tree红黑树

1.每个节点不是红色就是黑色 2.根节点是黑色 3.如果节点为红,其子节点必须为黑 4.任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同 这意味着新增节点必须为红、新增节点之父节点必须为黑(主要条件),如果不满足则必须调整颜色并且旋转树形 5 总结(当P父亲为红,插入节点X为红时,会产生冲突的解决方法) 外侧插入、伯父节点为黑,那么单旋转一次 内...

苞米地里捉小鸡的博客 365

树 —— 红黑树

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

starter_____的博客 2388

RBTree——红黑树

RBTree RBTree:红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。 红黑树是平衡二叉搜索树的一种(平衡二叉搜索树中又有AVL Tree),满足二叉搜索树的条件外,还应买足下面的4个条件: 1. 每个节点不是红...

王洋的博客 764

AC360变频器使用案例

AC360变频器使用案例!

QING_BOSS的博客 518

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 128

红黑树介绍

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

mz474920631的博客 4万+

W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包

本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。

weixin_42520573的博客 418

【C++】红黑树

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

bushibrnxiaohaij的博客 2964

SIPVicious实战指南:从零开始掌握VoIP渗透测试(Kali Linux环境)

本文为SIPVicious实战指南,详细介绍了在Kali Linux环境下进行VoIP渗透测试的完整流程。从环境准备与工具安装开始,逐步讲解如何使用svmap扫描SIP服务器、svwar枚举PBX分机号,以及svcrack进行密码安全测试,并整合svreport生成报告。旨在帮助安全从业者从零开始,系统掌握这套经典开源工具,在授权范围内有效评估VoIP系统的安全性。

weixin_29327977的博客 541

system.img解包打包工具

最近需要对system.img进行解包,修改系统属性和添加自己的APK,再打包烧录,整理俩个方法。 system.img解包打包工具方法一 1、把system.img转换成ext4格式 ./simg2img system.img system_ext4.img 2、挂载ext4到systemMount目录进行修改 sudo mount system_ext4.img systemMount/ -o loop 3、修改完成后 unmount 退出挂载使用如下命令

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 9706

红黑树原理详解

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

Tattoo的博客 3万+

33、密码学中的选择密文攻击与Cramer - Shoup加密方案

本文详细介绍了密码学中选择密文攻击的背景及其对Cramer-Shoup公钥加密方案的影响。该方案在决策Diffie-Hellman假设和抗碰撞哈希函数的基础上,能够有效抵御自适应选择密文攻击,并且其安全性无需依赖随机预言机模型。文章还分析了Cramer-Shoup方案的设计原理、加密与解密过程,以及其在标准假设下的安全性证明方法。此外,通过一系列相关练习,帮助读者进一步理解密码学概念如密文不可区分性、ElGamal加密、Goldwasser-Micali方案等。最后,文章展望了密码学的未来发展趋势,包括量子

vscode6remote的博客 100

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

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

bhbcdxb123的博客 2167

【WRF模拟】如何查看 WPS 的输入静态地理数据(二进制格式)?

如何查看 WPS 的输入静态地理数据(二进制格式)?

WW、forever的博客 633

导航系统 | 全球四大卫星导航系统(2025)核心能力对比分析

北斗系统通过GEO卫星(80°E、110.5°E、140°E)实现区域增强,其IGSO卫星在亚太地区形成"8"字形轨迹,使该区域可见卫星数量比GPS多4-6颗,显著提升复杂环境下的定位可用性[13]。北斗短报文功能在2025年云南地震救援中发挥关键作用,被困人员通过北斗终端发送120字求救信息,实现"位置+状态"一体化上报,救援响应时间缩短40%[15]。北斗通过三频信号(B1C/B2a/B3)消除电离层延迟误差,在城市峡谷环境下定位连续性达99.98%,优于GPS的99.95%[5]。

尘世冰封的专栏 2614

C++——红黑树

C++之红黑树板块讲解

dongxue727504的博客 3280

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【C++】——红黑树(手撕红黑树,彻底弄懂红黑树)

我们之前都学过ALV树,AVL树的本质就是一颗平衡二叉树,它的作用就是查找,插入和删除节点,最坏的时间复杂度都是O(logn)的,同时维护的高度差都是小于等于1的,但是也就是因为这个原因才被红黑树所替代红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由 Rudolf Bayer 于1978年发明,在当时被称为平衡二叉 B 树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的红黑树。

m0_74092462的博客 2085

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

Bob的博客 2831

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

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

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

CSQCSQCC的博客 1615

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

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

qq_54883034的博客 4123

C++之红黑树

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

cls的博客 2398

红黑树是什么?红黑树的作用?红黑树的调整?

前戏红黑树,对很多童鞋来说,是既熟悉又陌生。熟悉是因为在校学习期间,准备面试时,这是重点。然后经过多年的荒废,如今已经忘记的差不多了。如果正在看文章的你,马上快要毕业,面临着找工作的压力;又或者你觉得需要将这块知识重新复习一遍;又或者只是看看,那么恭喜你,赚到了。那么我将带领大家重新认识下红黑树,用简单的语言,搞懂红黑树。在学习红黑树之前,咱们需要先来理解下二叉查找树(BST)。二叉查找树要想了解...

好热 3665
上一篇: AVL树
下一篇: 基数排序
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值