IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 解释红黑树及其插入与删除(持续更新) -> 正文阅读

[数据结构与算法]解释红黑树及其插入与删除(持续更新)

红黑树的插入与删除

1、 何为红黑树?

开门见山地说,红黑树是一种平衡的二叉查找树。与AVL树类似,它对插入时间、删除时间和查找时间提供了最好可能的最坏情况担保。在基础的二叉搜索树的插入与删除所需的时间下,它只需要对节点的旋转、对节点变色等等的额外操作,因此在操作时间可维持在 O ( log ? n )下。

2、红黑树维持的规则?

红黑树在满足基础的二叉搜索树的规则下(即每个节点都大于它的左子树,小于它的右子树),还需要满足如下规则:

规则内容
规则1节点为红色或黑色
规则2根节点为黑色
规则3所有的叶节点都为黑色(指向空指针nullptr)
规则4每个红色节点的儿子都为黑色
规则5任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点

通过以上规则,我们可以总结出来以下一些结论:

结论内容
结论1任意两个红色节点不能够相连。(因为红色节点的孩子必须是黑色的,因此可以推出它的父亲节点必须是黑色的);
结论2每个节点的黑高必须相同。(在这里的黑高指该节点到它所能够到达的所有叶节点的简单路径所包含的黑色结点数目)。

3、红黑树的插入节点时的维护?

在对红黑树进行插入节点操作时,我们讨论以下何时它的规则会遭到破坏:

  • 规则1、2、3不会收到破坏;
  • 规则4在增加红色节点、将黑节点涂红,旋转时被破坏;
  • 规则5在增加黑色节点、将红节点涂黑,旋转时被破坏;

而我们发现,在进行插入时会破坏的规则4、5与推导出来的结论1、2是完全等价的,我们在接下来的维护过程中会反复使用这些规则。

对于不同的情况,我们分情况对其进行维护;
首先,我们规定新插入的节点必定涂成 红色,并且定义新插入的节点为 N、 它的父亲节点为 P、它的祖父节点为 G、它的叔叔节点(父亲节点的兄弟)为 U

  • 情况一:

    若插入时树是个空树,即没有父节点,那么将节点涂黑,直接插入。

  • 情况二:

    若插入时父节点为黑色,那么我们发现规则1、2都没有被破坏(插入的是红色节点但是父亲节点是黑色,并且任意一个节点的黑高不变),直接插入即可。

  • 情况三:

    若插入时其父节点为红色,且其叔节点为红色,那么根据结论1,其祖父节点必然为黑色。如图:
    在这里插入图片描述

    此时新增节点破坏了结论1,我们该考虑的是如何在解决破坏的结论(两红相邻)1的同时不破坏结论2(黑高相同)。
    很显然,我们只需要将父亲节点和叔叔节点涂成黑色,将祖父节点涂成红色,这样维持了两个红色节点不相邻且黑高不变。如图:在这里插入图片描述
    但是,这样就大功告成了吗?显然没有。因为我们将祖父节点重新涂色,并不能保证祖父节点带来的改变会维持整个红黑树的性质。
    因此,我们需要将祖父节点作为目标节点,从头开始进行各种情况的判断。

  • 情况四:

    若插入新节点时其父节点为红色,且其叔节点为黑色 且该节点与父亲节点的关系和父亲节点与祖父节点的关系相同(这里以该节点与父亲节点都是其父节点的左孩子为例),那么根据结论1,其祖父节点必然为黑色。

    如图:
    在这里插入图片描述

    此时新增的节点破坏了结论1,而我们讨论该如何维持二叉树的性质呢?

    很显然,单纯的变色操作已经不能维持二叉树使其同时满足结论1和2,那么我们尝试采用另一种搜索二叉树采用的、可以改变树的拓扑结构且不会改变搜索二叉树的性质的操作——旋转。

    我们尝试对父亲节点向右旋转 (当然,如果你的情况是“该节点与父亲节点都是其父节点的左孩子”,那么要进行左旋转),并且重新将父节点涂成黑色,祖父节点涂成红色满足 黑高不变

    如图:
    在这里插入图片描述

  • 情况五:若插入新节点时其父节点为红色,且其叔节点为黑色 且该节点与父亲节点的关系和父亲节点与祖父节点的关系不相同(这里以该节点是父亲的左节点,且父亲节点是祖父节点的右孩子为例),那么根据结论1,其祖父节点必然为黑色。

    我们很容易发现,这种情况与情况四只相差了一个字,即该节点与父亲节点的关系和父亲节点与祖父节点的关系不相同。

    如图:
    在这里插入图片描述

    此时,与情况四相同,结论1受到了破坏的威胁。

    我们可以对父亲节点做一次左旋,那么我们发现此时就与情况四类似了。于是我们把旋转后的父节点当作此节点,对其进行一次情况四的操作。如图:(当然,我们可以理解为整个操作为一次左右双旋。)

    如图:在这里插入图片描述 删除操作过几日更新~

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:38:52  更:2021-11-20 18:39:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 12:46:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码