当前位置: 首页 > news >正文

数据结构-二叉树-红黑树

一、红黑树的概念

红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因为是接近平衡的。

二、红黑树的性质

·1、每个结点不是红色就是黑色

2、根节点是黑色的

3、如果一个节点是红色的,则它的两个孩子节点必须是黑色的。

4、对于每个节点,从该节点到其所有后代节点的简单路径上,均包含相同的黑色节点(每条路径上黑色节点的数量相等)根到空节点算一条路径。

5、NIL节点是黑色的

三、怎么做到最长路径不超过最短路径的二倍?

根是黑色的,NIL是黑色的,如果一个节点是红色的,那么它的左右孩子都是黑色,不同的路径上有相同数量的黑色节点。上面的条件就可以推出最长路径不超过最短路径的两倍。

四、为什么红黑树更优于AVL树。

因为,旋转的次数少了。

五、红黑树的插入

再插入的时候我们插入的是红节点,如果插入黑色节点,就会违背各个路径上的黑色节点是相等的。如果插入红色节点,我们可能会违背一个节点是红色的它的左右孩子都是黑色的条件。当父亲是黑色的时候,插入红色节点没有违背任何的条件,如果当父亲是红色的时候,就违背了一个节点是红色的它的左右孩子都是黑色的条件。对于这个情况我们需要分类讨论。红黑树也是一棵不太平衡的平衡二叉树。

情况一

叔叔存在且为红

情况1,红黑树我们看的是uncle节点,父亲和叔叔变黑,grandfather变红 。那么局部的子树里面红黑节点的数量不变,且连续的红节点问题暂时解决了。

继续向上处理:

1、grandfather没有父亲,就是根,把grandfather变黑即可。

2、grandfather有父亲且为黑,结束。

3、grandfather有父亲且为红,和刚才是类似问题处理,把grandfather当成插入节点,按情况1,进行处理。

情况二:

叔叔不存在

如果叔叔不存在旋转加变色。

情况三:

叔叔存在且为黑

旋转+变色

总结:

红黑树插入关键看叔叔。

1、叔叔存在且为红变色+向上处理

2、叔叔不存在或者叔叔为黑色变色+旋转。旋转需要进行根据位置来判断。grandfather->left == parent ,parent->left == cur

右旋:父亲变黑,祖父为红,不需要再往上一层处理。

先左后右双旋:cur为黑,grandfather为红

相关文章:

数据结构-二叉树-红黑树

一、红黑树的概念 红黑树是一种二叉搜索树,但在每个节点上增加一个存储位表示节点的颜色,可以是Red或者BLACK,通过对任何一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,…...

C++11 新特性 decltype 说明符

一、typeof与typeid 1.1、typeof 在C11标准之前,GCC已经提供了一个类似功能的运算符 typeof对类型进行推导,但是这毕竟是编译器的实现,不是标准。 int a 0; typeof(a) b 5;1.2、typeid C标准提供了 typeid 运算符,获取的类型…...

java线程局部变量使用方式

线程局部变量是Java中用于存储线程本地信息的变量。这种变量仅在线程的生命周期内存在,并且每个线程都有自己的一份拷贝。换句话说,线程局部变量是线程私有的,其他线程无法访问。 使用场景主要包括: 1. 存储线程状态信息&#xff…...

【隧道篇 / WAN优化】(7.4) ❀ 01. 启动WAN优化 ❀ FortiGate 防火墙

【简介】几乎所有的人都知道,防火墙自带的硬盘是用来保存日志,以方便在出现问题时能找到原因。但是很少的人知道,防火墙自带的硬盘其实还有另一个功能,那就是用于WAN优化。 防火墙自带的硬盘 在FortiGate防火墙A、B、C、D系列&…...

2024数维杯数学建模B题生物质和煤共热解问题的研究原创论文分享

大家好,从昨天肝到现在,终于完成了2024数维杯数学建模挑战赛B题的完整论文啦。 实在精力有限,具体的讲解大家可以去讲解视频: 2024数维杯数学建模B题煤共热解每一问高质量完整代码讲解!_哔哩哔哩_bilibili 2024数维杯…...

中国电子学会(CEIT)2022年12月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会(CEIT)考评中心历届真题(含解析答案) C语言软件编程等级考试一级 2022年12月 编程题五道 总分:100分一、鸡兔同笼(20分) 一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至…...

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 5月12日,星期日

每天一分钟,知晓天下事! 2024年5月12日 星期日 农历四月初五 1、 全国多地已推“一次挂号管三天”,部分医院专家门诊适用。 2、 在梅大高速塌方事故中拦车、救援,黄曼秋等5人拟确认为见义勇为。 3、 深圳新能源车指标申请条件调…...

微服务思想以及实现

文章目录 前言一、什么时候需要拆分微服务1. 创业型项目2. 大型项目 二、怎么拆1. 拆分目标2. 拆分方式 三、微服务之间远程调用1. 实现方式2. 手动发送Http请求(RestTemplate)3. 服务注册中心3.1 原理3.2 Nacos注册中心3.3 服务注册3.4 服务发现(Discov…...

C语法:格式符号%f和%lf引发的错误

今天编程时有如下代码: #include"stdio.h"int main(void) {double profit;double bonus;printf("请输入本月利润\n");scanf("%f",&profit);//错误:此行profit是double类型,格式符为%f,当输入8时&#xff0…...

Java基础入门day48

day48 JDBC调用关系 tomcat 简介 tomcat是Apache下的一个核心项目,免费开源,支持servlet和jsp。 tomcat技术先进,性能稳定,目前比较流行的web应用服务器 安装 官网: Apache Tomcat - Welcome! 下载 tomcat8.5 解压&a…...

C++笔记(体系结构与内核分析)

1.OOP面向对象编程 vs. GP泛型编程 OOP将data和method放在一起,目的是通过封装、继承、多态提高软件的可维护性和可扩展性GP将data和method分开,可以将任何容器与任何算法结合使用,只要容器满足塞饭所需的迭代器类型 2.算法与仿函数的区别 …...

c++ 唤醒指定线程

在C中,直接唤醒一个特定的线程并不像在Java的Thread类中有interrupt()方法或者某些操作系统特定的API(如POSIX的pthread_cond_signal或Windows的SetEvent)那样简单。C标准库没有提供一个直接的方法来"唤醒"一个正在等待的线程。然而…...

java报错:使用mybatis plus查询一个只返回一条数据的sql,却报错返回了1000多条

今天遇到一个问题 系统线上问题,经常出现这样的问题,刚重启系统时不报错了,可是运行一段时间又会出现。sql已经写了limit 1,mybatis的debug日志也返回total为1,可是却报错返回了1805条数据 乍一看,感觉太不…...

AI图书推荐:利用生成式AI实现业务流程超自动化

《利用生成式AI实现业务流程超自动化》(Hyperautomation with Generative AI)这本书探索了广泛的用例和示例,展示了超自动化在不同行业、领域和特定部门的多样化应用, 让您熟悉UiPath、Automation Anywhere和IBM等流行工具和平台&…...

什么事防抖和节流,有什么区别,如何实现

防抖和节流,本质上是优化高频率执行代码的一种手段,比如:resize、scroll、keypress、mousemove这些事件在触发的时候,会不断调用绑定在事件上的回调函数,这样极大浪费资源,降低前端性能。 为了优化体验&am…...

PanguSync大数据量初始化脚本

由于数据库增量同步软件PanguSync初始化最大超时时间为600s,如果初始数据量很大,第一次部署时可能会超时,可以先停止任务,使用以下Sql语句进行初始化,以下语句可以分步执行,初始化完成后,后续无需再执行耗时…...

DELL T630服务器iDRAC分辨率调整办法

对于Dell T630服务器的iDRAC分辨率调整,您需要登录到iDRAC的Web界面。以下是详细的步骤: 登录iDRAC:在浏览器中输入iDRAC的IP地址,然后使用用户名(通常是“root”)和密码登录。 导航到虚拟控制台&#xff…...

您真的会高效使用 Mac 吗?

文章目录 屏幕的保养快捷键预览修改文件名查看文件属性搜索编辑复制,粘贴,剪切,撤销删除 跳转窗口屏幕截图声音Dock强制退出查字典神奇的Option键鼠标与触控板切换桌面与应用程序打开通知中心打开Mission Control 安装与卸载Mac应用程序压缩和…...

Vue11 Vue3完结撒花

shallowRef和shallowReactive shallowRef 作用&#xff1a;创建一个响应式数据&#xff0c;但只对顶层属性进行响应式处理 用法 let myVar shallowRef(initialValue)特点&#xff1a;只跟踪引用值变化&#xff0c;不关心值内部的属性变化 案例 <template><div c…...

CodeTop 高频笔试题总结(持续更新)

&#x1f3c6; 频率从高到低排序 &#x1f468;‍&#x1f3eb; 参考的频率数据&#xff1a;CodeTop &#x1f468;‍&#x1f3eb; 力扣hot100 无重复字符的最长子串 双指针 滑动窗口 哈希&#x1f468;‍&#x1f3eb; 力扣hot100 反转链表 指针 递归 一题多解&#x1f468;‍…...

DDoS防护架构解析与实战经验

随着互联网业务的迅猛发展&#xff0c;企业在享受技术红利的同时&#xff0c;也面临着越来越复杂的安全挑战。分布式拒绝服务攻击&#xff08;DDoS&#xff09;作为一种常见的网络攻击手段&#xff0c;能够通过大量的虚假流量导致服务器过载&#xff0c;从而影响业务的正常运行…...

告别‘Requirement already satisfied’:精准定位Python环境,让pip install不再迷茫

1. 为什么pip总是说"已经安装好了"&#xff1f; 每次看到"Requirement already satisfied"这个提示&#xff0c;我都想对着屏幕大喊&#xff1a;"不&#xff01;它根本没装在我想要的地方&#xff01;"这种抓狂的感觉&#xff0c;相信很多Python…...

Perplexity搜索功能隐藏入口全解锁:9个未公开Pro技巧,第7个连官方文档都没写!

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Perplexity搜索功能隐藏入口全解锁&#xff1a;现象与价值重估 Perplexity.ai 的公开界面长期以简洁问答框为核心&#xff0c;但其底层实际嵌套了多组未在UI中显式暴露的高级搜索能力——包括语义过滤、…...

别再只用差速轮了!手把手教你为Navigation2仿真打造专属阿克曼底盘模型(附完整URDF/SDF文件)

从差速轮到阿克曼&#xff1a;打造高仿真Navigation2底盘模型的完整指南 在机器人仿真领域&#xff0c;差速轮底盘因其简单可靠而广受欢迎&#xff0c;但真实世界的车辆大多采用阿克曼转向机制。本文将带您深入理解两种模型的本质差异&#xff0c;并手把手指导如何从零构建或改…...

AMD Zen 5架构深度解析:从芯片设计到市场格局的算力突围

1. 项目概述&#xff1a;一场迟来的算力突围战最近几年&#xff0c;但凡关注高性能计算、人工智能或者游戏显卡的朋友&#xff0c;心里可能都憋着一股气&#xff1a;市场几乎被一家公司主导&#xff0c;无论是数据中心里训练大模型的GPU&#xff0c;还是我们电脑里的独立显卡&a…...

ContextMenuManager:3步实现Windows右键菜单精准管理的开源解决方案

ContextMenuManager&#xff1a;3步实现Windows右键菜单精准管理的开源解决方案 【免费下载链接】ContextMenuManager &#x1f5b1;️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是操作系统中最频…...

别再只会if-else了!用状态机思路重构你的STM32寻迹小车代码(附工程源码)

从if-else到状态机&#xff1a;重构STM32寻迹小车的工程化实践 当三个红外传感器同时检测到黑色轨迹时&#xff0c;你的小车应该左转还是右转&#xff1f;当传感器短暂丢失信号时&#xff0c;是紧急刹车还是保持原有动作&#xff1f;这些问题在初学者用if-else堆砌的代码中往往…...

2026年产品经理必看:中国十大含金量产品岗位证书深度解析与职业进阶指南

大家好&#xff0c;很高兴能在这里和大家聊聊产品人的职业发展。&#x1f44b;转眼间我们已经步入 2026年&#xff0c;回首过去几年&#xff0c;互联网和科技行业的风向变了又变。作为在这个圈子里摸爬滚打多年的老兵&#xff0c;我深知大家此刻的焦虑&#xff1a;岗位竞争越来…...

操作插件方法

事件触发时机事务状态适用场景beforeExecuteOperationTransaction操作校验通过后&#xff0c;开启事务之前事务未开启✅ 修改源单据关联的其他单据beginOperationTransaction开启事务后&#xff0c;提交数据库之前事务已开启修改当前操作的单据自身数据...

用HyperLynx VX2.5做LPDDR4X与高速串行总线仿真的完整工作流

HyperLynx VX2.5实战&#xff1a;LPDDR4X与高速串行总线仿真全流程解析 在当今高速电路设计领域&#xff0c;信号完整性问题已成为制约产品性能的关键瓶颈。尤其对于搭载LPDDR4X内存和高速串行总线的移动设备与服务器&#xff0c;工程师们常常陷入这样的困境&#xff1a;设计阶…...