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

embedded/2024/11/20 5:39:27/

        AVL-tree之外,另一个颇具历史并被广泛运用的平衡二叉搜索树是RB-tree(红黑树)。所谓RB-tree,不仅是一颗二叉搜索树,而且必须满足一下规则:

1:每个节点不是红色就是黑色

2:根节点为黑色

3:若节点为红,其子节点必须为黑

4:任意节点至NULL的任何路径,所含黑节点数必须相同。

        根据规则4,新增节点必须为红;根据规则3,新增节点之父节点必须为黑。当新节点根据二叉搜索树的规则到达其插入点,却未能符合上述条件时,就必须调整颜色并旋转树形。

插入节点

假设红黑树起始状态如下

在该树的情况下,如果此时加入节点为3,58,75,75则会出现在红色节点中新增新的红色节点的情况,如下图所示:

针对以上插入的四种情况都需要对红黑树进行调整;便于对不通情况进行区分,以及后续讨论方便,我们给一些特定的节点定义一些代名。后续讨论会沿用这些代名。假设新加入节点为X,其父节点为P,祖父节点为G,伯父节点为S,曾祖父节点为GG。现在根据二叉搜索树的规则,新节点X必为叶子结点。根据红黑树规则4,X必为红。若P为红(这就违反了规则3,必须调整树形)则G必为黑(因为原RB-tree,必须遵循规则3)。于是根据X插入位置,及外围节点S和GG的颜色,分为一下四种情况。

情况1:S为黑且X为外侧插入

。如下图所示

此时针对PG进行一次单旋,并修改P和G的颜色,变成如下所示:

        注意此时,如果S不为null,则会出现X及G子树高度相差为2的情况,所以RB-tree不足以满足AVL-tree的特性。

情况2:S为黑且X为内侧插入

。如下图所示:

先针对XP做一次单旋,并修改X及G的颜色:得到如下图所示的图形:

再针对该树形的XG做一次单旋如下图所示:

情况3:S为红,且X为外侧插入

        如下图所示情况:

        

对此情况,先对PG做一次单旋,并改变X的颜色。如下图所示

此时如果GG为黑,则搞定了,如果GG为红,则见状况4。

状况4:S为红且X为外侧插入

此时将PG进行单旋,并将X节点被为黑色,转换为下图:

根据前文描述的红黑树树形,

此时将40为根节点的子树,当做新插入的节点X,60当做P,70为G,此时有变回了状态3;针对PG进行单旋,并修改X节点40的颜色为黑色,转换后,图形如下:

至此将红黑树四种旋转的情况都描述完了;

参考文档《STL源码剖析--侯捷》


http://www.ppmy.cn/embedded/138979.html

相关文章

c++数字雨实现

‌数字雨‌是一种视觉效果,通常出现在黑客电影中,表现为屏幕上不断下落的数字和字符,营造出一种科技感和动态效果。‌12 数字雨的实现方法 ‌编程实现‌:可以使用C/C编程语言来实现数字雨效果。通过定义一个字符串数组&#xff0…

基于Java Springboot宠物领养救助平台

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

Elasticsearch集群拒绝请求:索引磁盘使用超限

这是一个典型的Elasticsearch集群因为磁盘空间不足而触发的保护机制,导致索引被设置为只读模式(read-only-allow-delete​)。 以下是解决这个问题的步骤: 释放磁盘空间:您需要清理服务器上的磁盘空间,删除…

电子工牌独立双通道定向拾音方案(有视频演示)

现在一些行业的客服人员在面对客户都要求使用电子工牌分别记录客服和顾客的声音,我们利用双麦克风阵列双波束拾音的方案设计了一个电子工牌方案.可以有效分别记录客服和顾客的声音. 方案思路: 我们采用了一个双麦阵列波束拾音的模块A-59,此模块可以利用2个麦克风组成阵列进行双…

【设计模式】结合Tomcat源码,分析外观模式/门面模式的特性和应用场景

导航: 【Java笔记踩坑汇总】Java基础JavaWebSSMSpringBootSpringCloud瑞吉外卖/谷粒商城/学成在线设计模式面试题汇总性能调优/架构设计源码解析 目录 一、经典的组建家庭影院流程 二、传统方式解决影院管理 2.1 实现方案:客户端直接调用各流程 2.2 …

基于YOLOv8深度学习的不良坐姿监测与语音提醒系统(PyQt5界面+数据集+训练代码)

本文设计并实现了一种基于YOLOv8深度学习模型的智能坐姿检测系统,旨在实现对用户坐姿的实时监测和识别,帮助用户及时调整不良坐姿,从而减少因长期坐姿不良带来的健康风险。随着现代社会中久坐行为的增加,越来越多的人出现了因坐姿…

emerge 命令学习笔记

emerge 是 Gentoo Linux 系统上的包管理器,用于安装、更新和删除软件包。 常用选项 安装选项 -a: 使用所有可用的USE标志安装软件包。 -d: 安装软件包时不安装任何依赖。 -f: 强制安装软件包,即使它已经被安装。 -g: 下载并使用二进制包。 -i: 安装软件…

MySQL SELECT 语句执行链路解析

文章目录 1. 简介2. MySQL SELECT 执行链路总览2.1 执行链路概览2.2 示例查询语句 3. 连接器3.1 连接器的作用3.2 连接的类型3.3 用户权限验证3.4 连接器的性能影响 4. 查询缓存4.1 查询缓存的工作原理4.2 查询缓存的命中条件4.3 查询缓存的优缺点 5. 解析器与预处理器5.1 解析…