【C++学习篇】红黑树 从入门到进阶

ops/2025/1/16 13:42:06/

目录

1.红黑树的概念

1.1红黑树的规则

1.2红黑树的效率

2. 红黑树的实现

2.1 红黑树的结构

2.2红黑树的插入

2.2.1红黑树插入,旋转的一些细节

2.2.1.1 u(uncle)不存在 ,c为p的左孩子(单旋+变色)

 2.2.1.2 uncle存在且为黑,c为p的左孩子(单旋+变色)

2.2.1.3  u(uncle)不存在 ,c为p的右孩子(双旋+变色)

2.3插入节点的代码实现

3. 本期关于红黑树的总结:



1.红黑树的概念

红黑树是一棵二叉搜索树,但是在此基础之上,又增加了一个存储为来表示节点的颜色,可以是红色或者是黑色。通过对任意一条根到叶子的路径上的各个节点的颜色来进行约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。

1.1红黑树的规则

1.每个结点不是红⾊就是⿊⾊。

2.根结点是⿊⾊的。

3.如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。

4. 对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点

则说明,假设一条路径有n个黑节点,且全为黑,没有红,则该条路径最短;则最长路径肯定是一黑一红交替出现,因为红节点不能连续出现,所以最长路径节点数是2n。!!最短路径和最长路劲不一定存在,我这里只是做一个讲解。

 

1.2红黑树的效率

 假设N是红⿊树树中结点数量,h最短路径的⻓度,那么 2h − 1 <= N < 22∗h − 1 , 由此推出
 h ≈ logN ,也就是意味着红⿊树增删查改最坏也就是⾛最⻓路径 2 ∗ logN ,那么时间复杂度还是
 O(logN ) 。

红⿊树的表达相对AVL树要抽象⼀些,AVL树通过⾼度差直观的控制了平衡。红⿊树通过4条规则的颜⾊约束,间接的实现了近似平衡,他们效率都是同⼀档次,但是相对⽽⾔,插⼊相同数量的结点,红⿊树的旋转次数是更少的,因为他对平衡的控制没那么严格。

2. 红黑树的实现

2.1 红黑树的结构

2.2红黑树的插入

2.2.1红黑树插入,旋转的一些细节

 前提!!!插⼊⼀个值按⼆叉搜索树规则进⾏插⼊,插⼊后我们只需要观察是否符合红⿊树的4条规则。

1. 插⼊⼀个值按⼆叉搜索树规则进⾏插⼊,插⼊后我们只需要观察是否符合红⿊树的4条规则。
2. 如果是空树插⼊,新增结点是⿊⾊结点。如果是⾮空树插⼊,新增结点必须红⾊结点,因为⾮空树插⼊,新增⿊⾊结点就破坏了规则4,规则4是很难维护的。
3. ⾮空树插⼊后,新增结点必须红⾊结点,如果⽗亲结点是⿊⾊的,则没有违反任何规则,插⼊结束。
4. ⾮空树插⼊后,新增结点必须红⾊结点,如果⽗亲结点是红⾊的,则违反规则3。进⼀步分析,c是红⾊,p为红,g必为⿊,这三个颜⾊都固定了,关键的变化看u的情况,需要根据u分为以下⼏种情况分别处理。 

2.2.1.1 u(uncle)不存在 ,c为p的左孩子(单旋+变色)

 2.2.1.2 uncle存在且为黑,c为p的左孩子(单旋+变色)

2.2.1.3  u(uncle)不存在 ,c为p的右孩子(双旋+变色)

 2.2.1.4 uncle存在且为黑,c为p的右孩子(双旋+变色)

 

2.3插入节点的代码实现

 

 

3. 本期关于红黑树的总结:

  我觉得有一些难度,特别是在选旋转这里,要不是我为了写博客,在上完课之后,又梳理了一边。整体将清楚的结构写了下来,希望对大家有真的帮助。 


http://www.ppmy.cn/ops/150567.html

相关文章

【商城系统支付安全】

商城系统支付安全是电子商务中至关重要的一环&#xff0c;直接关系到用户的隐私和财产安全。以下是对商城系统支付安全的详细分析&#xff1a; 数据加密 使用SSL或TLS等加密协议&#xff0c;对传输的用户数据进行加密。 采用HTTPS协议&#xff0c;通过将HTTP与SSL/TLS结合&am…

抢十八游戏

前言 我国民国一直流传着一个名叫“抢十八”的抢数游戏&#xff1a;参与游戏的两人从1开始轮流报数&#xff0c;每次至少报1个数&#xff0c;最多报2个数&#xff0c;每人报的每个数不得与自已报过的或对方报过的重复&#xff0c;也不得跳过任何一个数。谁先报到18&#xff0c…

C++实现设计模式---原型模式 (Prototype)

原型模式 (Prototype) 原型模式 是一种创建型设计模式&#xff0c;它通过复制现有对象来创建新对象&#xff0c;而不是通过实例化。 意图 使用原型实例指定要创建的对象类型&#xff0c;并通过复制该原型来生成新对象。提供一种高效创建对象的方式&#xff0c;尤其是当对象的…

Spring MVC复杂数据绑定-绑定数组

【图书介绍】《SpringSpring MVCMyBatis从零开始学&#xff08;视频教学版&#xff09;&#xff08;第3版&#xff09;》_【新华文轩】springspring mvcmybatis从零开始学(视频教学版) 第3版 正版-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)&#xff08;第3版…

下载文件,浏览器阻止不安全下载

背景&#xff1a; 在项目开发中&#xff0c;遇到需要下载文件的情况&#xff0c;文件类型可能是图片、excell表、pdf、zip等文件类型&#xff0c;但浏览器会阻止不安全的下载链接。 效果展示&#xff1a; 下载文件的两种方式&#xff1a; 一、根据接口的相对url&#xff0c;拼…

Vue.js组件开发-如何自定义Element UI组件

在Vue.js项目中&#xff0c;自定义Element UI组件通常意味着你要基于Element UI的基础组件来创建新的、符合项目需求的组件。这可以通过组合、扩展或封装Element UI的现有组件来实现。 以下是一个基本的步骤指南&#xff1a; 一、准备阶段 ‌1.确保Element UI已安装‌&#…

C++并发编程之std::partial_sum的并行版本

在C中&#xff0c;std::partial_sum 是一个用于计算前缀和的算法&#xff0c;它将输入范围中的每个元素替换为其前缀和。为了提高性能&#xff0c;我们可以设计并实现一个并行版本的 std::partial_sum&#xff0c;以便在多核处理器上并行执行前缀和计算。基本思想是将输入范围划…

科技快讯 | 华为余承东2025新年信;教育部拟同意设置福耀科技大学等本科院校;我国成功发射一箭10星

四部门&#xff1a;畅通数据采集、标注、人工智能应用产业 财联社1月13日电&#xff0c;国家发展改革委等四部门发布《关于促进数据标注产业高质量发展的实施意见》。其中提出&#xff0c;畅通数据采集、标注、人工智能应用产业链&#xff0c;推动数据标注产业上下游协同发展。…