红黑树的学习

概念:

红黑树是一颗搜索二叉树,他的每一个结点增加一个存储位来表示结点的颜色,红色或者黑色。

通过对颜色进行约束,确保没有一条路径会比其他路径长处2倍,是接近平衡的

规则:

1)结点不是红色就是黑色

2)根节点是黑色的

3)任意一条路径不会有连续的红色结点,如果一个结点是红色,则它的两个孩子结点必须是黑色

4)对任意一个结点,从这个结点到它所有NULL结点的简单路径上,都包含相同数量的黑色结点

效率:

N:结点数量

h:最短路径长度

h约等于logN,红黑树增删查改时间复杂度还是O(logN)

红黑树通过规则约束平衡

插入 O(log(N)):

按二叉搜索树的规则插入,符合四条规则即可

空树插入,新增结点是黑色结点;非空结点插入,新增结点是红色结点

非空结点插入,新增结点是红色结点

如果父亲结点是黑色,则符合规则,插入结束

如果父节点是红色,要进一步分析

分析情况:

情况1:

只变色,不旋转,c为左右孩子,p为左右孩子是一样的

c:新增结点

p:c的父亲标识

g:p的父亲标识

u:p的兄弟标识

把p和u变黑,左边子树路径各增加一个黑色结点

g变红,保持g所在子树的黑色结点的数量不变,同时解决c,p红色结点连续的问题

把g当作c继续向上更新

向上更新:g为红色,g的父亲也为红色,就还需要继续处理;

g的父亲为黑色,处理结束

g为整棵树的根节点,把g变回黑色

情况2:a

单转+变色

u不存在则c为新增结点

u存在且为黑,则c一定不是新增,c之前为黑色,是在c的子树中插入,符合情况1,是将c从黑色变为红色更新上来的

分析:p变黑解决连续红色结点的问题,u不存在且为黑,需要旋转+变色才能解决问题

不需要向上更新,p的父节点是红色还是黑色都可以

不需要向上更新,p的父节点是红色还是黑色都可以

情况2:b

双旋+变色

g

p (u)

c

u不存在c一定是新增结点;u存在且为黑,c一定不是新增结点,c之前是黑色的,是在c的子树中插入,符合情况1,是将c从黑色变成红色更新上来的

分析:p变黑,解决连续红色结点的问题

u不存在且为黑,需要旋转+变色解决

以p为旋转点进行左单旋,再以g为旋转点进行右单旋
把c变黑,g变红
c变成这棵树新的根
不需要向上更新,c的父节点是红是黑都不违反规则

以p为旋转点进行右单旋,再以g为旋转点进行左单旋
把c变黑,g变红
c变成这棵树新的根
不需要向上更新,c的父节点是红是黑都不违反规则

查找:

按照二叉搜索树逻辑实现

效率为O(logN)

验证:

我们去检查红黑树的四条规则

规则3前序遍历

规则4前序遍历用形参记录到当前结点的黑色结点数量,走到NULL,算处黑色结点的总个数,再选一条路径比较黑色结点数量,依次比较


空树也是红黑树。树中的空指针域为叶子结点,空树也是有节点的

红黑树也是二叉搜索树,按照中序遍历得到有序序列

相关推荐
dear_bi_MyOnly6 小时前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
一只小菜鸡..7 小时前
南京大学 操作系统 (JYY) 学习笔记:从 UNIX 到 Linux 与庞大的应用生态
笔记·学习·unix
MartinYeung58 小时前
[论文学习]迈向自主医疗人工智能智能体:MIRA系统深度分析
人工智能·学习
熊猫钓鱼>_>10 小时前
ArkTS 装饰器总览:V1 / V2 / 通用装饰器完整学习笔记
笔记·学习·华为·交互·harmonyos·arkts·arkweb
茯苓gao13 小时前
嵌入式开发笔记:CAN与CAN FD完全指南——从帧格式差异到MCU选型实战
网络·笔记·stm32·嵌入式硬件·学习·汽车
木木_王13 小时前
嵌入式学习 | STM32 裸板驱动开发(Day06) | DHT11温湿度传感器超详解(单总线时序+全套驱动代码+智能温湿度报警项目)
驱动开发·stm32·学习
FellAveal14 小时前
【Go语言入门学习笔记】Part19.速率控制、原子计数器、互斥锁(Mutex)、状态协程
笔记·学习·golang
你怎么知道我是队长14 小时前
经典蓝牙(Bluetooth Classic / BR/EDR)学习计划
学习
极地野狼 音乐哔哔15 小时前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
学习·microsoft
oier_Asad.Chen16 小时前
【洛谷题解/AcWing题解】洛谷P4011 孤岛营救问题/AcWing1131拯救大兵瑞恩
数据结构·笔记·学习·算法·动态规划·图论·宽度优先