数据结构之旅:红黑树如何驱动 Set 和 Map

server/2024/12/21 12:47:56/

一、红黑树

1、定义

        红黑树是一种二叉搜索树,在每个节点上增加一个存储位表示结点的颜色(红色或者黑色)。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保不会有一条路径比其他路径长出两倍,因而这种树是一种接近平衡的。和AVL(平衡二叉搜索树)区别就是不需要严格计算并控制平衡因子使得左右子树之间的高度差不超过1的繁琐过程。

2、满足条件

(1)根节点是黑色。

(2)每个结点不是黑色就是红色

(3)对于每个结点,从该结点到其所有后代叶子结点的简单路径上均包含相同数目的黑色结点。

(4)每个叶子结点都是黑色的(这里的叶子结点和前面不同指的是空结点)。

定理:红黑树中最长路径中的结点的个数不会超过最短路径结点个数的两倍。

3、实现原理

(1)要保证插入结点一定是红色结点,否则会导致结点路径黑色结点个数增加,进而导致其他结点路径的黑色结点数目也要跟着变化。

(2)情景一:插入结点父结点为黑色,则直接插入即可,无需其他处理。

(3)情景二:插入结点cur、cur的父结点p和叔叔结点u均为红色(c,p,u均红)。

这种情况只需要颜色变更即可,首先将g变红,p,u变黑,然后如果g为根节点则直接将g变黑即可,如果g不是根节点,则需要将c结点变为cur结点,g,p,u按照相同规则更新,然后按照上述方法继续调整,直到父节点为黑色或者g为根节点。

(4)情景三:插入结点的父结点p为红色,并且叔叔结点u为黑色或者不存在的情况。

a、当叔叔结点存在且为黑色的情况:其中cur为p的左节点,并且p为g的左节点。下面图中的cur肯定不是插入结点,如果是插入结点的话,原来的二叉树就不满足红黑树的要求了,因此cur是因为下面结点更新颜色而导致变红的(原来是黑色)。

处理方法:将原来红黑树以g为中心向右旋转,然后进行颜色更新(p变黑,g变红)。

b、当叔叔结点不存在的情况:其中cur为p的左节点,并且p为g的左节点。这里的cur和上面不同的是,cur可以为当前插入结点,处理方法和上面一样。

c、当cur结点为parent结点的右结点,并且p为g的左节点。这里的cur不是插入结点原因和a一样。处理方法:首先要以parent为中心向左旋转,然后再以g为中心向右旋转,最后将cur变为黑色,然后g变为红色。

d、当叔叔结点不存在的情况:c结点为p结点的右结点,并且p为g的左节点。处理方式和方案c一样。

另外当p为g的右节点时,和上面一样仍然有四种情况,处理方式:在旋转过程中方向相反即可。


http://www.ppmy.cn/server/151943.html

相关文章

人脸修复与增强腾讯开源项目GFPGAN介绍

GFPGAN 简述 GFPGAN (Generative Facial Prior GAN) 是一种基于生成对抗网络(GAN)的面部图像修复与增强模型。它由腾讯 ARC Lab 的研究团队开发,目的是以高效和高质量的方式修复低分辨率、受损或老化的人脸图像,同时保留其真实感和…

智能编排,精准掌控:Agent编排如何实现精细化权限控制

Agent编排产品以其灵活的接口调用和直观的图表展示功能,为企业的快速功能集成和数据可视化提供了极大的便利。然而,在企业中系统对接和数据共享的安全问题至关重要,许多用户在使用传统的Agent编排产品时,仍然面临以下问题 接口暴…

探索 OpenTofu:开源基础设施即代码工具

引言 在现代云计算和 DevOps 实践中,基础设施即代码(IaC)已经成为不可或缺的一部分。它使得基础设施的管理更加自动化、可重复和可维护。HashiCorp 的 Terraform 是这一领域的领先工具,但随着时间的推移,开源社区也开始关注其许可证的变更。OpenTofu 作为 Terraform 的一…

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程?

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程? 目录一、前言二、具体原因三、解决方法 目录 报错截图 一、前言 进行应用程序开发时,需要对w3wp进行附加调试等场景&#xff…

我在华为的安全日常

在华为工作了数年后,我养成了一个习惯:每次离开座位,即便是去卫生间,我也会条件反射地锁屏电脑。晚上回到家,躺在床上,脑海中偶尔会闪过一丝疑虑:办公室的门窗是否关好?虽然这种担忧…

千亿级市场新机遇,品牌如何紧跟“宠”爱趋势创新宠物营销?

“世界破破烂烂,小狗缝缝补补”。在这个快节奏、高压力的社会中,宠物因其可爱的属性已经成为不少年轻人的“精神布洛芬”。 随着宠物经济的蓬勃发展,宠物营销已成为品牌竞相探索的新蓝海。那么,面对这一充满机遇的市场&#xff0…

鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用

鸿蒙项目云捐助第二十讲云捐助项目物联网IOT的使用 在鸿蒙技术完成云捐助项目中,物联网技术也是具有一定生命力的存在。这里也会在云捐助项目中使用物联网的技术。 一、华为云IoT物联网操作 这里以华为云的Iot物联网操作来介绍华为云I ot物联网技术。 这里从百度…

Windows11 离线更新 WSL

离线更新wsl Windows设置中,启用子系统(启用方法请自行搜索),但是当执行wsl --update命令时,速度很慢,甚至会失败,所以直接使用离线方式下载访问微软在github上的wsl托管,下载最新版…