数据结构——红黑树基础(博文笔记)

数据结构在查找这一章里介绍过这些数据结构:BST,AVL,RBT,B和B+。

除去RBT,其他的数据结构之前的学过,都是在BST的基础上进行微小的限制。

1.比如AVL是要求任意节点的左右子树深度之差绝对值不大于1,由此引出插入删除等操作时的LL,RR,RL,LR旋转。
2.B树要求二叉树节点中保存的数据只有一个,而B-树得节点中保存的是线性表,真实数据数据不止一个有很多。由于表中的指针和子节点一一对应,而子节点个数又有限定(小于m但大于m/2)
3.B+树则是修改了B数里的规则,要求每个节点的关键字要出现在其对应子节点中。

废话少说,开始整理RBT,下面整理的内容是参考这篇文章的,很推荐去读一下。

1.RBT的基本定义

0.满足BST的要求

1.根节点和叶子节点是黑色的(叶子节点是空节点,下图中将null节点省略)

2.对于任意节点,从此节点到任何叶子节点的简单路径上的黑色节点数量一致。

3.只有红色和黑色两种颜色的节点

4.任意红色节点不相邻

顶端为黑,非红即黑,红不相邻,叶路黑同
在这里插入图片描述

2.RBT的插入

我们插入的节点一定为红色节点

情况1:插入为节点为a,其叔叔节点d为红色

在这里插入图片描述
(这里注意,我们如果发现c其实是根节点的话,直接将b和d变成黑色)

改变之后还需要注意c父节点是否为红色,如果是则需要继续向上调整。

情况2:如果插入节点a是右孩子,它的叔叔节点 d 是黑色。

在这里插入图片描述
此时我们需要对a做一步左旋,然后进入情况三

情况3:插入点a为左子,叔叔节点为黑

在这里插入图片描述
这样则是以b做右旋,然后交换b和c的颜色。

几个小技巧:
1.如何判断旋转类型:
我们从根节点向引发“事故”的节点走,连续两步就可以确定是LL,RR,LR,RL
2.怎么转。
LL是以不平衡子树的根节点,向右旋一次,RR则是向左旋。
LR是先以引发节点左旋一次,然后以根节点右旋一次,RL同理。

3.RBT的删除

为了保证满足红黑树定义的要求,有些节点会被标记成两种颜色,“红 - 黑”或者“黑 - 黑”。如果一个节点被标记为了“黑 - 黑”,那在计算黑色节点个数的时候,要算成两个黑色节点。

删除操作的平衡调整分为两步:

1.第一步是针对删除节点初步调整。初步调整只是保证整棵红黑树在一个节点删除之后,仍然满足最后一条定义的要求,也就是说,每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点;

2.第二步是针对关注节点进行二次调整,让它满足红黑树的第三条定义,即不存在相邻的两个红色节点。

初步调整

情况1:删除节点a,仅有一个子节点b

在这里插入图片描述
删除节点 a,并且把节点 b 替换到节点 a 的位置,改变b的颜色。

情况2:删除的节点 a 有两个非空子节点,并且它的后继节点就是节点 a 的右子节点 c

在这里插入图片描述
如果C无左子树,则删除a用c替代,c设置为与a相同的颜色,如果c原本为黑色,那么给c的子节点d多加一个黑色,变为“红 - 黑”或者“黑 - 黑”,这个时候,关注节点变成了节点 d,第二步的调整操作就会针对关注节点来做。

情况3:删除的是节点 a,它有两个非空子节点,并且节点 a 的后继节点不是右子节点

在这里插入图片描述

如果c有左子树,那么就让下一层的节点胜任后继节点,如果节点 d 是黑色,则c多加一个黑色标记。

二次调整

初步调整之后,关注节点变成了“红 - 黑”或者“黑 - 黑”节点。针对这个关注节点,再分四种情况来进行二次调整。

备注:二次调整是为了让红黑树中不存在相邻的红色节点。

情况1:如果带标记点是 a,它的兄弟节点 c 是红色的

在这里插入图片描述
b左旋,然后标记节点和祖父节点c与父节点b交换颜色

情况2:如果带标记点是 a,它的兄弟节点 c 是黑色的,并且节点 c 的左右子节点 d、e 都是黑色的

在这里插入图片描述
标记节点的兄弟c改为红色,a取消标记,父节点带标记。

前两种情况调整完后仍需找机会调整至第三种情况,然后转跳至第四种情况完成调整。

情况3:如果带标记点是 a,它的兄弟节点 c 是黑色,c 的左子节点 d 是红色,c 的右子节点 e 是黑色

在这里插入图片描述
点 a 的兄弟节点 c 右旋;节点 c 和节点 d 交换颜色;转为第四种情况

情况4:如果带标记点 a 的兄弟节点 c 是黑色的,并且 c 的右子节点是红色的

在这里插入图片描述
带标记节点a的父点 b 左旋;
将点 c 的颜色与点 b 设置成相同的颜色;
点 b 的颜色设置为黑色;
点 a 中去掉一个黑色,节点 a 就变成了红色或者黑色;
点 a 的叔叔节点 e 设置为黑色;
调整结束

我的妈啊,删除的第二步调整太复杂了!

写在后面的一点碎碎念

预推免面试时间紧迫,本想着两天吃透数据结构,结果发现自己有些痴心妄想了,两天复习下来发现了很多问题。
1.经常考察的十个排序里有很多忘记了具体实现。
2.查找这一章,我发现自己对B+,RBT基本不了解
3.图论这一章,我把AOE忘了
4.串串这一章的KMP虽然好学,但是这东西学一次忘一次。
5.绪论里很多基本概念不清楚,比如逻辑结构中线性结构的三个类型的典型代表的具体原理和实现

然后计划如下:
1.如此看来完全搞好数据结构可能还需要3天左右,这3天里我会搞完数据结构,把之前复习好的操作系统和计算机网络巩固好不能忘记(短期计划)
2.然后是深度学习项目的很多理论知识忘了,我会坚持每天去学习机器学习基础和之前项目中的深度学习知识,对于机器学习基础,Fastrcnn,yolo,transformer和deepsort做到原理熟悉。(长期计划)
3.每天抽出时间去了解老师,套磁老师,准备面试需要的英语自我介绍和基本问题问答。(长期计划)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/68656.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

教程分享:如何制作一个旅游路线二维码?

吃一成不变的早餐,九点出门还会遇见楼下遛狗的大爷,老板掐着表发起了会议邀请,窗外还是那几棵树,天空依旧灰蒙蒙的,羊了个羊第二关还是过不去,理发店的小哥又倚在门口抽烟…… 大多时候,我们的…

Kafka 01——Kafka的安装及简单入门使用

Kafka 01——Kafka的安装及简单入门使用 1. 下载安装1.1 JDK的安装1.2 Zookeeper的安装1.2.1 关于Zookeeper版本的选择1.2.2 下载、安装Zookeeper 1.3 kafka的安装1.3.1 下载1.3.2 解压1.3.3 修改配置文件 2. 启动 kafka2.1 Kafka启动2.2 启动 kafka 遇到的问题2.2.1 问题12.2.…

数学建模—分类模型

本讲将介绍分类模型。对于而分类模型,我们将介绍逻辑回归(logistic regression)和Fisher线性判别分析两种分类算法;对于多分类模型,我们将简单介绍Spss中的多分类线性判别分析和多分类逻辑回归的操作步骤下。 本题按水…

vue3多页面配置你一定会遇到的问题,踩坑指南

vue3实现多页面打包容易,关键是如何实现本地的开发和调试?我们接下来解决如下几个问题: 1 多页面项目的项目结构是怎样的? --public--src---App.vue---main.js---page1. ---App.vue---main.js----home.vue----list.vue---page2.…

HttpRunner搭建接口自动化测试项目

前言:前面写过一篇PytestAllure接口自动化测试框架搭建的博客,这篇博客学习另外一款优秀的开源的接口自动化测试框架:HttpRunner,本博客主要学习如何搭建基于HttpRunner的接口自动化测试项目 PytestAllure接口自动化测试框架搭建…

编写一个指令(v-focus2end)使输入框文本在聚焦时焦点在文本最后一个位置

项目反馈输入框内容比较多时候,让鼠标光标在最后一个位置,心想什么奇葩需求,后面试了一下,是有点影响体验,于是就有了下面的效果,我目前的项目都是若依的架子,用的是vue2版本。vue3的朋友想要使…

“智农”数字孪生一体化管控平台

数字乡村可视化|数字乡村|农业可视化|高标准农田|数字农业大脑|大棚可视化|数字农业|数字乡村|数字农业研学|数字大棚|智慧大棚|农业数字孪生|智慧农业|数字农业温室|智农|智慧农业可视化|智能温室|智慧温室|农业大数据|农业产业园可视化|植物工厂|可视化农业监控系统|设施农业…

判断时间段是否重叠

1、逻辑公式 时间段1&#xff1a;start1&#xff08;开始时间&#xff09;&#xff0c;end1&#xff08;结束时间&#xff09; 时间段2&#xff1a;start2&#xff08;开始时间&#xff09;&#xff0c;end2&#xff08;结束时间&#xff09; 重叠条件为&#xff1a;start1 <…

I 2C 接口控制器理论讲解

IIC系列文章&#xff1a; (1) I 2C 接口控制器理论讲解 (2) I2C接口控制设计与实现 文章目录 一、 IIC协议二、IIC协议解析1.特点2.规定3.器件地址4.存储地址 三、IIC写时序1.单字节写时序2.连续写时序&#xff08;页写时序&#xff09; 四、IIC读时序1.单字节读时序2.连续读时…

鸿蒙边缘计算网关正式开售

IDO-IPC3528鸿蒙边缘计算网关基于RK3568研发设计&#xff0c;采用22nm先进工艺制程&#xff0c;四核A55 CPU&#xff0c;主频高达2.0GHz&#xff0c;支持高达8GB高速LPDDR4&#xff0c;1T算力NPU&#xff0c;4K H.265/H264硬解码&#xff1b;视频输出接口HDMI2.0&#xff0c;双…

62.不同路径

一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff1f; 动态规…

竞赛项目 深度学习手势识别算法实现 - opencv python

文章目录 1 前言2 项目背景3 任务描述4 环境搭配5 项目实现5.1 准备数据5.2 构建网络5.3 开始训练5.4 模型评估 6 识别效果7 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习手势识别算法实现 - opencv python 该项目较为新颖…

.netcore grpc客户端流方法详解

一、客户端流式处理概述 客户端流式处理方法在该方法没有接收消息的情况下启动。 requestStream 参数用于从客户端读取消息。 返回响应消息时&#xff0c;客户端流式处理调用完成。客户端可以发送多个消息流到服务端&#xff0c;当所有客户端消息流发送结束&#xff0c;调用请…

APP备案明明是好事,为啥有些人反对呢?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; APP和小程序备案&#xff0c; 这事在网上闹的沸沸扬扬&#xff0c;明明是好事&#xff0c;可为啥那么多人反对呢?而且最近出现了好多阴阳怪气的声音。 话说从2005年3月起&#xff0c;国内所有的网…

AI抢饭碗!多部由Midjourney+Runway,制作的电影火了!丨IDCF

ChatGPT等生成式AI正在重塑各个行业的工作模式&#xff0c;尤其是影视领域。最近&#xff0c;多部由MidjourneyRunway生成式AI制作的电影预告片在社交平台上火了。 一部名叫的《芭本海默》的电影从对白、场景、人物、切镜完全由生成式AI制作完成并受到了用户的好评。该片结合了…

IDEA简单拷贝一份新项目记录

IDEA简单拷贝项目记录 拷贝后改项目名&#xff0c;然后iml 配置文件改项目名&#xff0c;然后 .idea 中的compiler.xml 里面的name标签改项目名。 就可以了

3D Web轻量化引擎HOOPS Communicator如何实现对BIM桌面端的支持?

HOOPS Communicator是一款简单而强大的工业级高性能3D Web轻量化渲染开发包&#xff0c;其主要应用于Web领域&#xff0c;主要加载其专有的SCS、SC、SCZ格式文件&#xff1b;HOOPS还拥有另一个桌面端开发包HOOPS Visualize&#xff0c;主要加载HSF、HMF轻量化格式文件。两者虽然…

PyTorch深度学习实战(10)——过拟合及其解决方法

PyTorch深度学习实战&#xff08;10&#xff09;——过拟合及其解决方法 0. 前言1. 过拟合基本概念2. 添加 Dropout 解决过拟合3. 使用正则化解决过拟合3.1 L1 正则化3.2 L2 正则化 4. 学习率衰减小结系列链接 0. 前言 过拟合 (Overfitting) 是指在机器学习中&#xff0c;模型…

putty使用记录

在官网下载并安装putty 一、SSH 二、FTP open 192.168.1.118 put -r C:\Users\Administrator\Desktop\test /opt/lanren312/test # 上传&#xff08;文件夹&#xff09; get -r /opt/lanren312/test C:\Users\Administrator\Desktop\test2 # 下载&#xff08;文件夹&#xff…

边缘计算框架 Baetyl v2.4.3 正式发布

导读Baetyl v2.4.3 版本已经发布&#xff0c;对 v2.3.0 版本的部分功能进行了升级优化。公告称&#xff0c;这些新功能继续遵循云原生理念&#xff0c;构建了一个开放、安全、可扩展、可控制的智能边缘计算平台。 Baetyl 项目由百度发起&#xff0c;基于百度天工 AIoT 智能边缘…