王道数据结构笔记03-红黑树/RBT

数据结构——红黑树 数据结构——红黑树简单介绍及部分功能代码实现~~~ 阅读详情
AI摘要

本文详细介绍了红黑树的发明背景、定义、性质、查找、插入操作中的调整策略,以及与AVL树的区别。重点讲解了红黑树插入示例和调整规则,包括黑叔、红叔和不同形态的旋转。

一、为什么要发明红黑树?

在这里插入图片描述

平衡二叉树AVL:插入/删除很容易破坏“平衡”特性,需要频繁调整树的形态。如:插入操作导致不平衡,则需要先计算平衡因子,找到最小不平衡子树(时间开销大),再进行LL/RR/LR/RL调整;

红黑树RBT:插入/删除很多时候不会破坏“红黑”特性,无需频繁调整树的形态。即便需要调整,一般都可以在常数级时间内完成;

平衡二叉树:适用于以查为主、很少插入/删除的场景;
红黑树:适用于频繁插入、删除的场景,实用性更强;

二、红黑树大概会怎么考?

红黑树的定义、性质–选择题;
猜测:红黑树的考察形式会和平衡二叉树以往的考察形式类似;
红黑树的插入/删除–要能手绘插入过程(不太可能考代码,略复杂),删除操作也比较麻烦,也许不考;
在这里插入图片描述

三、红黑树的定义

红黑树是二叉排序树→左子树结点值≤ 根结点值≤ 右子树结点值;
红黑树与普通二叉排序树(BST)相比,有什么要求:
①每个结点或是红色,或是黑色的;
②根节点是黑色的;
③叶结点(外部结点、NULL结点、失败结点)均是黑色的;
④不存在两个相邻的红结点(即红结点的父节点和孩子结点均是黑色);
⑤对每个结点,从该结点(不含该结点)到任一空叶结点(包含空叶结点)的简单路径上,所含黑结点的数目相同;

红黑树规则记忆口诀:左根右,根叶黑,不红红,黑路同;

红黑树的结点定义:

struct RBnode {
	int key;		//关键字的值
	RBnode* parent;	//父节点指针
	RBnode* lChild;	//左孩子指针
	RBnode* rChild;	//右孩子指针
	int color;		//结点颜色,如:可用0/1表示黑/红,也可使用枚举型enum表示颜色
};
【实例】一颗红黑树:
【练习】是否符合红黑树要求?

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

【一种可能的出题思路】

下列选项中,满足“红黑树”定义的是()
在这里插入图片描述

四、补充概念:结点的“黑高”

结点的黑高 b h bh bh ——从某结点出发(不含该结点)到达任一空叶结点(包含空叶结点)的路径上黑结点总数;

五、红黑树的性质

性质1【定义④⑤可推】:从根节点到叶结点的最长路径不大于最短路径的 2 2 2倍;
性质2:有 n n n个内部节点的红黑树高度 h ⩽ 2 l o g 2 ( n + 1 ) h\leqslant2log_2{(n+1)} h⩽2log2​(n+1);
红黑树查找操作时间复杂度= O ( l o g 2 n ) O(log_2n) O(log2​n),查找效率与AVL树同等数量级;

六、红黑树的查找

红黑树的查找与BST、AVL 相同,从根出发,左小右大,若查找到一个空叶节点,则查找失败;

七、红黑树的插入

  • 先查找,确定插入位置(原理同二叉排序树),插入新结点;
  • 新结点是根——染为黑色;
  • 新结点非根——染为红色;
    • 若插入新结点后依然满足红黑树定义,则插入结束;
    • 若插入新结点后不满足红黑树定义,需要进行调整,使其重新满足红黑树定义;
    • 如何调整?看新结点叔叔的颜色:
      • 黑叔:旋转+染色【对新结点所在子树进行旋转,对原先的儿、父或爷进行颜色的更换,旋转规则和颜色更换规则取决于新结点作为孙子结点的子树形态属于LL型、RR型、LR型、RL型中的哪一种,如下】;
        • LL型:右单旋,父换爷+染色【父、爷进行颜色的更换】;
        • RR型:左单旋,父换爷+染色【父、爷进行颜色的更换】;
        • LR型:左、右双旋,儿换爷+染色【儿、爷进行颜色的更换】;
        • RL型:右、左双旋,儿换爷+染色【儿、爷进行颜色的更换】;
      • 红叔:染色+变新【对叔、父、爷都进行颜色的更换,爷结点因此而变成新结点,然后再看看是否影响了红黑树的定义,看看还要不要操作什么】;
【示例】从一棵空的红黑树开始,依次插入一组数字

这组数字为:20,10,5,30,40,57,3,2,4,35,25,18,22,23,24,19,18;

①插入:20,10,5【黑叔+LL型:右单旋+父爷色变】
  • 黑叔:旋转+染色
    • LL型:右单旋,父换爷+染色

在这里插入图片描述

②插入:30【红叔:叔父爷色变+爷更新】
  • 红叔:染色+变新
    • 叔父爷染色,爷变为新结点

在这里插入图片描述

③插入:40【黑叔+RR型:左单旋+父爷色变】
  • 黑叔:旋转+染色
    • RR型:左单旋,父换爷+染色

在这里插入图片描述

④插入:57【红叔:叔父爷色变+爷更新】
  • 红叔:染色+变新
    • 叔父爷染色,爷变为新结点

在这里插入图片描述

⑤插入:3,2【黑叔+LL型:右单旋+父爷色变】
  • 黑叔:旋转+染色
    • LL型:右单旋,父换爷+染色

在这里插入图片描述

⑥插入:4【红叔:叔父爷色变+爷更新】
  • 红叔:染色+变新
    • 叔父爷染色,爷变为新结点

在这里插入图片描述

⑦插入:35,25,18,22【红叔:叔父爷色变+爷更新】
  • 红叔:染色+变新
    • 叔父爷染色,爷变为新结点

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

⑧插入:23【黑叔+LR型:左右双旋+儿爷色变】
  • 黑叔:旋转+染色
    • LR型:左、右双旋,儿换爷+染色

在这里插入图片描述

⑨插入:24【红叔:叔父爷色变+爷更新,黑叔+LR型:左右双旋+儿爷色变】
  • 红叔:染色+变新
    • 叔父爷染色,爷变为新结点

在这里插入图片描述

  • 黑叔:旋转+染色
    • LR型:左、右双旋,儿换爷+染色

在这里插入图片描述

⑩插入:19,18【黑叔+RL型:右左双旋+儿爷色变】
  • 黑叔:旋转+染色
    • RL型:右、左双旋,儿换爷+染色

在这里插入图片描述

八、总结

在这里插入图片描述

九、其他问题

1、红黑树插入演示

参考:https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
在这里插入图片描述
自我训练方法:你可以自己设计一些插入序列,每一次插入后,都先思考应该如何调整,然后在网站中演示验证。插入新元素时,尽可能覆盖黑叔LL/RR/LR/RL、红叔的情况。

从一棵空的红黑树开始,依次插入一组数字:20,10,5,30,40,57,3,2,4,35,25,18,22,23,24,19,18;
在这里插入图片描述

2、与“黑高”相关的推论

在这里插入图片描述
结点的黑高 b h bh bh ——从某结点出发(不含该结点)到达任一叶结点的路径上黑结点总数;

思考1:根节点黑高为 h h h的红黑树,内部结点数(关键字)至少有多少个?
回答1:内部结点数最少的情况——总共 h h h层黑结点的满树形态;
结论:若根节点黑高为h,内部结点数(关键字)最少有 2 h − 1 2^h-1 2h−1个;

红黑树的性质:
性质1:从根节点到叶结点的最长路径不大于最短路径的 2 2 2倍;
性质2:有 n n n个内部节点的红黑树高度 h ⩽ 2 l o g 2 ( n + 1 ) h\leqslant2log_2{(n+1)} h⩽2log2​(n+1);
红黑树查找操作时间复杂度= O ( l o g 2 n ) O(log_2n) O(log2​n),查找效率与AVL树同等数量级;
【证明】
性质1证明:任何一条查找失败路径上黑结点数量都相同,而路径上不能连续出现两个红结点,即红结点只能穿插在各个黑结点中间;
性质2证明:若红黑树总高度= h h h,则根节点黑高 ⩾ h / 2 \geqslant h/2 ⩾h/2,因此内部结点数 n ⩾ 2 h / 2 − 1 n \geqslant 2^{h/2}-1 n⩾2h/2−1,由此推出 h ⩽ 2 l o g 2 ( n + 1 ) h\leqslant2log_2{(n+1)} h⩽2log2​(n+1);

思考2:根节点黑高为 h h h的红黑树,内部结点数(关键字)至多有多少个?
回答2:内部结点数最多的情况—— h h h层黑结点,每一层黑结点下面都铺满一层红结点。共 2 h 2h 2h层的满树形态;
结论:若根节点黑高为 h h h,内部结点数(关键字)最多有 2 2 h − 1 2^{2h-1} 22h−1个;

3、红黑树的删除

重要考点:
①红黑树删除操作的时间复杂度 = = = O ( l o g 2 n ) O(log_2n) O(log2​n);
②在红黑树中删除结点的处理方式和“ 二叉排序树的删除 ”一样;
③按②删除结点后,可能破坏“红黑树特性”,此时需要调整结点颜色、位置,使其再次满足“红黑树特性”。

免责声明:
1.编写此文是为了更好地学习数据结构,如果损害了有关人的利益,请联系删除;
2.如果文中描述欠妥,请在评论中进行指正;
3.文字编写不易,若感觉有用,点赞收藏关注会让博主很开心哦;
4.此外,本文支持任何形式的转载,转载请注明出处,非常感谢!!!
本文源自:https://blog.youkuaiyun.com/testleaf/article/details/126007281
参考:
https://www.cs.usfca.edu/~galles/visualization/RedBlack.html

农业杂草检测——棉花杂草数据集 然后将本层13×13的特征图谱经过×2上采样扩充到26×26,并与上层中26×26的特征图谱拼接,得到新的26×26的特征图谱,在该特征尺度上进行第二次预测,此时得到的特征图谱是相对输入图像16倍下采样,具有中尺度感受野,适合检测中等尺度对象;通过目标检测,能够及时清除杂草,减少病虫害的滋生和传播,保障棉花的健康生长,并有助于降低生产成本。对于地膜覆盖的棉田,由于膜内耕作层土温高、底墒好,杂草出苗早而集中,一般覆膜后5 - 7天杂草陆续出土,在墒情好的情况下,15天左右即形成出土高峰。 阅读详情

相关推荐

EB配置输入捕获ICU模块----基于S32K3

基于S32K311芯片,EB配置ICU输入捕获(Emios 和Siul)

weixin_43586400的博客 1772

【考研】数据结构:红黑树(2022新增考点)

一、前言 根据王道讲解和网上资料,总结的红黑树相关知识点和考点。 可能考:红黑树的性质、插入、删除(选择题,代码可能不考,略复杂) 二、红黑树 (一)定义 1. 红黑树是实质上是一棵自平衡的二叉查找树,有时形态不一定是平衡二叉树。 (左子树结点值 < 根结点值 < 右子树结点值) 2. 引入带颜色的节点也是为了方便在进行插入或删除操作时,如果破坏了二叉查找树的平衡性能通过一系列变换保持平衡。 3. 红黑树的查找、插入、删除的时间复杂度均为。 (注意:AVL的查找、插入、删除

qq_34438969的博客 9515

Windows下ArduPilot SITL仿真环境搭建与QGC地面站联调全攻略

软件在环仿真(SITL)是无人机开发中的关键一环,它通过将飞控固件运行在PC上,用数学模型模拟传感器数据,实现无硬件依赖的飞行逻辑验证。这项技术不仅降低了试错成本,更为地面站开发、自动化测试和任务规划提供了安全可控的试验场。在工程实践中,MAVLink协议作为飞控与地面站之间的通信桥梁,贯穿仿真、遥测与指令控制全程。结合QGroundControl(QGC)这一主流地面站,开发者可以直观地观察飞行状态、规划航点并记录日志。本文以Windows原生环境为例,详细介绍ArduPilot SITL的搭建流程、MA

weixin_31858171的博客 316

红黑树记忆口诀

红黑树的记忆口诀

u012076529的专栏 680

802.1AS-2011_Gptp协议栈

GPTP(广义时钟同步协议,或IEEE 802.1AS)的基本功能是确保局域网中所有的时钟都同步,并提供时间信息。这种协议用于在局域网中进行同步和时间对齐,其目的是确保网络中各设备的时间一致性。

weixin_49041703的博客 2541

技术面试官视角:复盘北航/中科院/哈工大保研机试与面试,他们到底在考察什么?(附真题回忆与评分侧重点)

本文从技术面试官视角解析北航、中科院、哈工大等顶尖院校保研机试与面试的考核逻辑,揭示编程语言限制、题目难度设计等隐藏考察维度,并提供真题回忆与评分侧重点。帮助考生理解面试官的真实意图,掌握应对策略,提升通过率。

weixin_42549496的博客 518

数据结构 - 红黑树之宁式记忆口诀

二叉查找树(Binary Search Tree) BST特性 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。 尝试查找节点8的位置:9-5-7-8 缺点:如果新增节点时,初始节点只有9,5,13。按顺序插入4,3,2,1。则会导致二叉树的不平衡性 红黑树 自平衡的二叉查找树,满足二叉查找树的特征外 1.结点是红色或黑色。 2.根结点是黑色。 3.每个叶子结点都是黑色的空结点(NIL结点)。 4 每个红色

Raymond的博客 1451

微信聊天记录解密,必须是root的手机

手机上安装x-plore软件,将/data/data目录的相关EnMicroMsg.db auth_info_key_prefs.xml拷贝到/storge/emulated/0目录后才可以拷贝到电脑。路径:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml。但是是加密过的 需要解密 解密密码生成规则是手机IMEI+微信UIN md5(32位小写)后的前7位。安卓手机要root测试版本微信要7或者8版本都可以。选择message表。

venus60的专栏 1004

红黑树特征速记口诀

红黑树特征速记: 非黑既红 红不相连 根黑苗齐 (1)每个节点或者是黑色,或者是红色。(非黑既红) (2)根节点是黑色。(根黑苗齐) (3)每个叶子节点(NIL)是黑色。[注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。(非黑既红、根黑苗齐) (5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。(根黑苗齐) ...

子与余语墨的博客 1664

DeepSeek+知网研学:三步搞定文献矩阵与对比分析(实战指南)

本文提供了一套高效实用的文献管理分析实战指南,详细介绍了如何结合DeepSeek大模型与知网研学平台,通过三个核心步骤快速完成文献梳理。该方法能自动提炼文献核心要素、生成结构化对比矩阵,并辅助发现研究空白,显著提升学术研究者的文献分析效率与深度。

weixin_29061509的博客 490

基于ESP32的智能停车场管理系统开发

智能停车场管理系统通过引入物联网(IoT)技术,实现对停车场内车辆的实时监控、空闲车位的管理、车辆的入场与出场控制等功能,大大提高了停车场的利用率和管理效率。通过集成物联网技术、云平台以及先进的传感器和执行器,系统不仅能实时监控停车场的车位状态,还能提供更好的用户体验。本文将介绍如何基于ESP32开发一个智能停车场管理系统,涵盖系统架构、硬件选择、软件开发以及最新技术的应用,帮助开发者实现高效的智能停车管理。ESP32的代码主要负责处理车位传感器的数据,控制LED指示灯的状态,以及与云平台进行数据交互。

2201_76125393的博客 911

红黑树插入删除流程(流程图)

- 首先按照二叉树排序树的规则确定要插入的位置(要插的位置一定是叶节点,即假设和二叉排序树一样不做调整,插入后一定是叶节点) - 若新节点是根节点,染为黑色,结束 - 否则默认先染为红色,这时判断它的父节点是不是红色(是否破坏不红红规则) - 若没有破坏不红红规则,结束 - 破坏了不红红规则(父节点是红色),接下来看叔叔节点的脸色行事 - 黑叔,旋转+染色:LL/RR型,父爷颜色对换+左/右单旋;LR/RL型,儿爷颜色对换+左右/右左双旋;结束 - 红树,染色+变新:叔、父、爷都进行

jokerMingge的博客 1370

Openclaw错误分析与解决方案之:Agent couldn’t generate a response.

Openclaw错误分析与解决方案之:Agent couldn't generate a response. Note: some tool actions may have already been executed — please verify before retrying.

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1315

随笔03 笔记整理

这篇博文主要是博主更新的。

2401_84301352的博客 2043

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

38.红黑树(王道第7章查找补充知识)

红黑树是二叉排序树-左子树结点值≤根结点值≤右子树结点值。①每个结点或是红色,或是黑色的②根节点是黑色的③叶结点(外部结点、NULL结点、失败结点)均是黑色的④不存在两个相邻的红结点(即红结点的父节点和孩子结点均是黑色)⑤对每个结点,从该节点到任一叶结点的简单路径上,所含黑结点的数目相同struct RBnode { //红黑树的结点定义int key;//关键字的值//父节点指针//左孩子指针//右孩子指针int color;

qq_54708219的博客 645

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【算法篇】红黑树初探,揭开红黑树的神秘面纱

> 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 > 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary > B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。 > 红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能

weixin_43809685的博客 471

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

王道--数据结构第七章 查找

红黑树算法演示链接情况1:兄弟够借,借右兄弟的关键字(以删除关键字38为例)情况2:兄弟够借,借左兄弟的关键字情况3:左右兄弟不够借,那就删完之后和兄弟节点合并到同一个节点(例:删除节点49)冲突的发生是不可避免的,我们应该尽可能的减少冲突发生的可能性,因此当我们在设计散列函数的时候,对于给定的关键字集合,我们应该根据关键字集合的特性来确定比较合适的散列函数,让这些关键字能够均匀的散列到各个地址中,分布的越均匀发生的冲突的可能性就越小。

qq_55051321的博客 369

红黑树基本操作

记录红黑树的概念及基本操作

weixin_45186425的博客 1449

红黑树-01 红黑树原理和特性,插入结点变色调整原理与插入结点实战

红黑树插入结点后调整和变色过程、复杂红黑树插入结点实战、红黑树与AVL树对比、红黑树原理和特性

aquriushu的博客 1121

数据结构之红黑树

文章目录一:红黑树基本概念(1)什么是红黑树(2)红黑树的性质(3)为什么要给空结点(NIL)上色?(4)为什么最长路径一定不超过最短路径的2倍?(5)红黑树效率 一:红黑树基本概念 (1)什么是红黑树 红黑树在二叉搜索树基础上,增加了一个域来标识结点的颜色,可以是红色和黑色。 通过对任何一条从根节点到叶子结点的简单路径上的各个结点的颜色的约束,红黑树可以确保没有一条路径能比其他路径长出2倍,也就是最长路径比最短路径的长度最长不超过2倍 AVL树是一颗严格的平衡二叉树,而红黑树只是近似于平衡,并不是严格平

快乐江湖的博客 678

王道考研数据结构第七章知识点总结

实现流程:略,见王道课件。

weixin_56054625的博客 2339

王道数据结构笔记

考研王道数据结构学习

qq_51432166的博客 2109

红黑树(Red-Black Tree,RBT)

1.红黑树 1.1 什么是红黑树? 红黑树是一种平衡二叉查找树的变体,它的左右子树高差有可能大于 1,所以红黑树不是严格意义上的平衡二叉树(AVL),但对之进行平衡的代价较低, 其平均统计性能要强于 AVL 【引用自红黑树】 笔记来源于:什么是红黑树,据说红黑树很难理解,看动画5分钟就弄明白原理 1.2 为什么要引入红黑树? 二叉排序树(BST)、平衡二叉树(AVL)、红黑树(RBT)均用于查找数据元素 BST →\rightarrow→ AVL →\rightarrow→ RBT BST →\right

一个搬运知识的笨小孩 831

数据结构——红黑树基础(博文笔记)

0.满足BST的要求1.根节点和叶子节点是黑色的(叶子节点是空节点,下图中将null节点省略)2.对于任意节点,从此节点到任何叶子节点的简单路径上的黑色节点数量一致。3.只有红色和黑色两种颜色的节点4.任意红色节点不相邻顶端为黑,非红即黑,红不相邻,叶路黑同。

R的博客 1850

数据结构——四十六、红黑树的插入(王道408)

红黑树插入操作遵循二叉排序树规则,新节点默认红色。调整策略分为三种情况:1)根节点直接染黑;2)叔节点红色时,对父、叔、爷节点染色,并将爷节点视为新节点;3)叔节点黑色时,根据LL/RR/LR/RL四种不平衡类型进行旋转(单旋或双旋)并重新染色。插入时需维护"不红红"特性,通过颜色反转和旋转操作保持平衡。文章通过具体案例演示了各种插入情况下的调整过程,包括LL型的右旋、RR型的左旋、LR型的左右双旋和RL型的右左双旋操作,最终形成符合红黑树特性的平衡结构。

2301_80201235的博客 1584
上一篇: 《满庭芳·国色》色号记录
下一篇: 王道数据结构笔记02-平衡二叉树/平衡树/AVL树
testleaf
博客等级 码龄7年 3514粉丝 72原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

testleaf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值