红黑树&B树
红黑树最长路径和最短路径关系

红黑树最长路径和最短路径关系红黑树,这个名字听起来像是一种特别的植物,但实际上它可是一种超级实用的数据结构。
想象一下,它就像是个调皮的小朋友,既要有规矩,又要自由自在。
说到红黑树,很多人最先想到的就是它的特性,比如说,根节点是黑色、红色节点不能连续等等。
不过,今天我们来聊聊红黑树的最长路径和最短路径之间的关系。
你可得准备好,可能会有点意思哦!红黑树的最长路径和最短路径就像是两条平行线,一条走得欢快,另一条却是稳重得多。
最长路径就像个走路不带脑的小孩子,随便跑来跑去,可能在树的最底下折腾半天,找到个长长的回头路。
而短路径嘛,就像是个聪明的孩子,心里有谱,走一步就知道该往哪儿走,直奔目的地。
你说,这不就是人生吗?有的人喜欢绕弯,有的人喜欢直来直去,各有各的乐趣。
说到最长路径,我们常常会感叹,怎么会有这么多枝枝杈杈的选择呢!在红黑树里,最长路径往往是从根节点出发,经过一系列的红色和黑色节点,最终到达一个叶子节点。
这一路走下来,可能你会发现,虽然看上去很复杂,但其实里面隐藏了不少规矩。
因为红黑树要求,任何一条路径上黑色节点的数量必须保持一致,虽然看似平常,但这可真是个大工程。
咱们的短路径可就轻松多了,直接跳跃过去,省时省力。
讲到这,你可能会问,最长路径和最短路径有什么关系呢?这两个家伙在红黑树里可不是对立的,而是相辅相成的。
你看,最长路径的存在其实就是在告诉我们,短路径的价值。
在最长路径上,你会经历许多复杂的选择,每一个节点都是一个小小的决策点。
通过这些选择,我们才能清晰地看到短路径的简单和直接。
就像生活中,有时候多绕几圈,反而能看清楚真正想要的是什么。
红黑树的特性让它的高度始终保持在一个相对平衡的状态。
这就意味着,无论你是在寻找最长路径还是短路径,树的高度都是有限的。
想想看,如果树的高度无限,最长路径可能会让你累得要死,根本找不到出路。
这样一来,红黑树就像是一位耐心的引导者,总能让你在选择中找到一条理想的道路。
红黑树面试题

红黑树面试题红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它能够保持在插入、删除等操作之后仍保持平衡。
在面试中,红黑树是常见的面试题目之一。
本文将通过解答一些常见的红黑树面试题来帮助读者更好地理解红黑树的性质和操作。
1. 什么是红黑树?红黑树是一种自平衡的二叉搜索树,它的每个节点都有一个额外的存储位来表示节点的颜色,可以是红色或黑色。
它满足以下性质:(1) 每个节点要么是红色,要么是黑色。
(2) 根节点是黑色。
(3) 每个叶子节点(NIL节点,空节点)是黑色。
(4) 如果一个节点是红色的,则它的两个子节点都是黑色的。
(5) 从任意节点到其每个叶子节点的所有路径都包含相同数目的黑色节点。
2. 如何实现红黑树的插入操作?红黑树的插入操作可以分为以下几个步骤:(1) 将节点插入到二叉搜索树中,按照二叉搜索树的规则找到合适的位置。
(2) 将插入的节点标记为红色。
(3) 根据红黑树的性质,调整树的结构来满足红黑树的要求,确保不会出现连续的红色节点。
具体的调整操作分为几种情况,我们以插入节点为A为例进行说明:(1) A是根节点,将A标记为黑色。
(2) A的父节点是黑色,不需要进行调整。
(3) A的父节点是红色:a. A的叔节点是红色:将A的父节点和叔节点都标记为黑色,将A的祖父节点标记为红色,然后以祖父节点为当前节点进行进一步的调整。
b. A的叔节点是黑色或不存在,且A是其父节点的右子节点:以A的父节点为支点进行左旋转,然后再以A的父节点为当前节点进行进一步的调整。
c. A的叔节点是黑色或不存在,且A是其父节点的左子节点:将A的父节点标记为黑色,将A的祖父节点标记为红色,以A的祖父节点为支点进行右旋转,最后整个树都符合红黑树的要求。
3. 如何实现红黑树的删除操作?红黑树的删除操作相对于插入操作要复杂一些。
删除操作可以分为以下几个步骤:(1) 根据删除节点的值,在红黑树中找到要删除的节点。
(2) 根据要删除的节点的情况进行不同的处理:a. 要删除的节点没有子节点或只有一个子节点:直接删除该节点,并将其子节点接替上来。
c语言红黑树遍历序算法

c语言红黑树遍历序算法红黑树是一种自平衡的二叉查找树,它具有良好的平衡性能,能够保持在较低的高度范围内。
在C语言中,我们可以使用递归或者非递归的方式来实现红黑树的遍历。
下面我将分别介绍中序遍历、前序遍历和后序遍历的算法。
1. 中序遍历算法:中序遍历的顺序是先遍历左子树,然后访问根节点,最后遍历右子树。
在C语言中,我们可以使用递归实现中序遍历:c.void inOrderTraversal(struct Node root) {。
if (root != NULL) {。
inOrderTraversal(root->left);printf("%d ", root->data);inOrderTraversal(root->right);}。
}。
2. 前序遍历算法:前序遍历的顺序是先访问根节点,然后遍历左子树,最后遍历右子树。
同样可以使用递归实现前序遍历:c.void preOrderTraversal(struct Node root) {。
if (root != NULL) {。
printf("%d ", root->data);preOrderTraversal(root->left);preOrderTraversal(root->right);}。
}。
3. 后序遍历算法:后序遍历的顺序是先遍历左子树,然后遍历右子树,最后访问根节点。
同样可以使用递归实现后序遍历:c.void postOrderTraversal(struct Node root) {。
if (root != NULL) {。
postOrderTraversal(root->left);postOrderTraversal(root->right);printf("%d ", root->data);}。
}。
另外,以上是使用递归实现的遍历算法,也可以使用非递归的方式来实现,利用栈来辅助实现遍历。
红黑树的特点范文

红黑树的特点范文红黑树是一种自平衡的二叉树,它具有以下特点:1.二叉树属性:红黑树满足二叉树的基本性质,即对于树中的每个节点,其左子树的所有节点的值都小于该节点的值,而右子树的所有节点的值都大于该节点的值。
2.红黑性质1:每个节点要么是红色,要么是黑色。
3.红黑性质2:根节点是黑色的。
4.红黑性质3:每个叶子节点(NIL节点,空节点)是黑色的。
5.红黑性质4:如果一个节点是红色的,那么它的两个子节点都是黑色的。
6.红黑性质5:对于每个节点,从该节点到其所有后代叶子节点的简单路径上,均包含相同数量的黑色节点。
7.黑高度相等:从根节点到任意叶子节点的路径上的黑色节点数量必须相同,这个数量成为黑高度。
红黑树之所以被称为“红黑树”,是因为它的节点可以被标记为红色或黑色,并且通过这些颜色的约束规则实现了平衡性。
1. 自平衡性:通过红黑性质的约束规则,红黑树能够自动平衡,保持树的高度相对较低,从而能够提供较快的、插入和删除操作的平均时间复杂度为O(log n),保证了树的高效性能。
2.结构简单:红黑树的基本特点较为简单,只有5个约束规则,相较于AVL树等平衡二叉树,实现和维护的复杂度较低。
3.有序性:红黑树是一个有序树,即树中的节点按照特定的顺序排列。
这使得红黑树非常适用于需要有序数据的场景,例如字典、索引等。
4. 广泛应用:红黑树被广泛应用于各种数据结构和算法中,如集合、映射、区间树、数据库索引等。
在C++的STL库中,map和set容器的实现就是基于红黑树。
红黑树的缺点:1.相对复杂:相较于其他二叉树,红黑树的实现和维护较为复杂,因为需要遵循红黑性质。
这增加了代码的复杂度和难度。
2. 插入和删除操作相对慢:虽然红黑树的平均情况下插入和删除的时间复杂度为O(log n),但相较于普通二叉树,红黑树在实际性能上略慢一些。
总结:红黑树是一种自平衡的二叉树,通过红黑性质的约束规则,保持树的平衡性和有序性。
它具有较高的查询、插入和删除效率,并且广泛应用于各种数据结构和算法中。
红黑树的应用场景

红黑树的应用场景
x
红黑树的应用场景
红黑树(Red-Black tree)是一种自平衡二叉搜索树,也叫蓝黑树,它是在计算机科学中用来维护有序的元素集合的一种数据结构。
它的特点是,任何一个节点的左右子树的高度只相差1——也就是说,它们自动调整自己,当插入或删除节点时,保持其平衡。
红黑树有多种应用场景。
其中最重要的就是在并发编程中使用它来保持同步性和正确性。
它可以用作字典、键值存储、排序等数据结构,可以用来解决缓存管理、查找最近的匹配项、查找最近的空位等问题。
此外,红黑树还广泛应用于操作系统、数据库系统等中。
红黑树在操作系统中的应用包括:操作系统特定的定时器任务队列的管理、连接状态表的管理(网络状态的保持)、文件系统中的元素索引、内存分页表的管理等。
红黑树也广泛应用于数据库系统,用作B+树、事务日志索引(控制数据库的性能)等,它们能够提供快速的查询、插入操作。
此外,红黑树在图形处理系统和CAD(Computer Aided Design,计算机辅助设计)程序中用于提供三维空间/曲面的模型数据结构设计。
它们也可以用作编译器的符号表,用于检查程序的语法和语义正确性。
总而言之,红黑树由于其自平衡的特性,被广泛用于不同的软
件领域中,解决涉及搜索、排序、索引和存储等问题。
红黑树优点和应用场景

红黑树优点和应用场景红黑树优点及应用场景红黑树是一种自平衡二叉查找树,具有优秀的平均性能和较稳定的最坏情况性能。
它的优点包括高效的查找、插入和删除操作,以及平衡性能好,不易退化成链表等。
本文将详细介绍红黑树的优点及其应用场景。
一、红黑树优点1.高效的查找、插入和删除操作红黑树的查找、插入和删除操作时间复杂度均为O(log n),其中n 为树中节点数。
由于红黑树的平衡性,它的查找性能非常高,并且插入和删除操作也能够保持比较稳定的性能。
这使得红黑树在实际应用中非常受欢迎。
2.平衡性能好,不易退化成链表红黑树是一种自平衡二叉查找树,它通过保持节点的颜色、旋转等方式来保持树的平衡性。
这使得红黑树不易退化成链表,从而保证了它的查找、插入和删除操作的时间复杂度稳定。
3.易于实现和理解红黑树的实现相对简单,且易于理解。
它的平衡性质也使得它的实现相对稳定,不易出现错误。
这使得红黑树在实际应用中非常受欢迎,尤其是对于那些需要高效查找、插入和删除操作的应用场景。
二、红黑树应用场景1.数据库索引数据库索引是一种常见的应用场景,它通过建立一棵树来实现对数据的快速查找。
在这种情况下,红黑树是一种非常合适的数据结构,因为它能够提供高效的查找、插入和删除操作,并且能够保持较好的平衡性。
2.操作系统调度操作系统调度是一种需要高效查找和插入操作的应用场景。
在这种情况下,红黑树可以用来实现进程优先级的管理,从而保证高优先级进程的优先执行。
3.路由表路由表是一种需要高效查找和插入操作的应用场景。
在这种情况下,红黑树可以用来实现路由表的管理,从而保证路由的高效查找和更新操作。
4.编译器实现编译器是一种需要高效查找和插入操作的应用场景。
在这种情况下,红黑树可以用来实现符号表的管理,从而保证编译器的高效性能。
红黑树是一种非常优秀的数据结构,它具有高效的查找、插入和删除操作,以及平衡性能好,不易退化成链表等优点。
它在数据库索引、操作系统调度、路由表和编译器实现等应用场景中都有广泛的应用。
hashmap红黑树转链表条件

hashmap红黑树转链表条件
红黑树是一种特殊的二叉查找树,它具有以下特性:
1. 每个节点都有一个颜色,可以是红色或黑色。
2. 根节点是黑色的。
3. 每个叶节点(最后的空节点)都是黑色的。
4. 每个红色节点的两个子节点都是黑色的。
5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
红黑树可以用来实现HashMap,它可以提供比普通的散列表更高的查找性能。
但是,红黑树有时也会变得很大,这时就需要将它转换成链表。
转换红黑树为链表的条件是:
1. 树中的所有节点都必须是叶节点,也就是没有子节点。
2. 所有节点的颜色必须都是黑色。
3. 所有节点必须按照键值的升序排列。
4. 所有节点必须满足红黑树的性质,即每个节点的左右子节点的颜色必须相同,且每个节点的键值必须大于其左子节点,小于其右子节点。
当红黑树满足上述条件时,可以将它转换成链表。
转换的过程是:首先,将根节点作为链表的头节点,然后将根节点的左子节点作为头节点的下一个节点,依次类推,直到所有节点都被转换成链表。
综上所述,红黑树可以转换成链表,但是必须满足一定的条件,即所有节点都是叶节点,所有节点的颜色都是黑色,所有节点按照键值的升序排列,并且满足红黑树的性质。
红黑树的使用案例

红黑树的使用案例红黑树是一种自平衡的二叉搜索树,它在许多应用中都有广泛的应用。
下面将列举一些使用红黑树的案例。
1. 数据库索引:数据库中的索引通常使用红黑树来实现。
红黑树能够在插入、删除和查找操作上保持较好的性能,因此非常适合作为数据库索引结构。
2. C++ STL中的map和set容器:map和set容器是C++标准模板库(STL)中的常用容器,它们的底层实现通常使用红黑树。
map容器实现了键值对的有序存储,set容器则实现了有序集合的存储。
3. Linux进程调度:Linux操作系统中的进程调度算法使用红黑树来管理进程的优先级。
红黑树能够高效地处理进程的插入和删除操作,并且能够按照优先级进行快速查找。
4. 文件系统:一些现代的文件系统(如NTFS、ZFS等)使用红黑树来管理文件的索引信息。
红黑树能够快速地定位文件的位置,提高文件系统的读写性能。
5. 路由表:网络路由器中的路由表通常使用红黑树来存储路由信息。
红黑树能够高效地查找最长匹配的路由条目,实现快速的数据包转发。
6. 平衡二叉搜索树的实现:红黑树是平衡二叉搜索树的一种实现方式,它能够在插入和删除操作后自动调整树的结构,保持树的平衡性。
因此,红黑树常常作为平衡二叉搜索树的基础实现。
7. 哈希表的实现:一些哈希表的实现中使用红黑树来解决哈希冲突。
当发生哈希冲突时,红黑树可以作为冲突解决的机制,将冲突的键值对存储在同一个桶中,并通过红黑树来管理桶内的键值对。
8. 软件缓存:一些软件缓存中使用红黑树来管理缓存的键值对。
红黑树能够按照键的顺序进行有序存储,并且能够高效地进行插入、删除和查找操作。
9. 任务调度:操作系统中的任务调度器通常使用红黑树来管理任务队列。
红黑树能够按照任务的优先级进行有序存储,并且能够快速地查找最高优先级的任务。
10. 编译器的符号表:编译器在进行词法分析和语法分析时,需要维护符号表来记录变量和函数的信息。
红黑树可以作为符号表的底层数据结构,提高符号表的插入和查找性能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二叉树的删除
• 二叉树插入一个结点
红黑树的删除 1/6
• 二叉树的删除
– 没有儿子,即为叶结点。直接把父结点的对应儿子指针设为NULL,删除儿子结点就OK了。 – 只有一个儿子。那么把父结点的相应儿子指针指向儿子的独生子,删除儿子结点也OK了。 – 有两个儿子
后缀树 1/4
• 以字符串S=XMADAMYX为例,它的长度为8,所以S[1..8], S[2..8], ... , S[8..8]都算S的后缀,我们一般还把空字串也算成后缀。这样,我们一共有 如下后缀(对于后缀S[i..n],我们说这项后缀起始于i): S[1..8], XMADAMYX, 也就是字符串本身,起始位置为1 S[2..8], MADAMYX,起始位置为2 S[3..8], ADAMYX,起始位置为3 S[4..8], DAMYX,起始位置为4 S[5..8], AMYX,起始位置为5 S[6..8], MYX,起始位置为6 S[7..8], YX,起始位置为7 S[8..8], X,起始位置为8 空字串,记为$
B树的删除示例 1/6 • 还是以5阶B树为例,依次删除H,T,R,E
– 树中最多含有m(m=5)个孩子,因此关键字数最小为ceil(m / 2)-1=2。 – 即关键字数小了(小于2个)就合并,大了(超过4个)就分裂
后缀树 2/4
把上面的后缀加入Trie后, 我们得到右边的结构:
后缀树 3/4
• 把这种没有分叉的路径压缩到一条边 • 并在叶节点上标注上每项后缀的起始位置
后缀树 4/4 • 在待处理的子串后加一个空字串
– 例如我们处理XMADAMYX前,先把XMADAMYX变为 XMADAMYX$, 于是就得到suffix tree--后缀树了
• 如果删除该元素后,首先判断该元素是否有左右孩子结点
– 如果有,则上移孩子结点中的某相近元素(“左孩子最右边的节点”或“右孩子 最左边的节点”)到父节点中,然后是移动之后的情况 – 如果没有,直接删除后,移动之后的情况。
• 删除元素,移动相应元素之后,如果某结点中元素数目(即关键字数)小于 ceil(m/2)-1,则需要看其某相邻兄弟结点是否丰满(结点中元素个数大于 ceil(m/2)-1)
Tire 树的应用
• tire树可以理解为一个N叉树,对于26个字母集的tire树即是一 个26叉树。对于10个阿拉伯数字即是一个10叉树。 • tire树的插入、查找、删除的时间复杂度都是o(N)
– N为待插入、查找、删除字符串的长度。
• tire树的使用场合:
– 求最近公共祖先,需要利用tire树作为数据结构 – 排序:前序遍历tire树,即可以得到一个按字母顺序的排序表 – 字符串检索:在搜索引擎中会用的,主要是已知一个字符串集合,对 这个集合进行预处理生成一个tire树,以后就维护这个tire树即可。
• (注:变化前,原本就未违反性质5,只是为了把问题转化为兄弟节点为黑色的情况)。
红黑树的删除 4/6
• 删除修复情况2:当前节点是黑加黑且兄弟是黑色且兄弟节点的两个子节点 全为黑色。
– 解法:把当前节点和兄弟节点中抽取一重黑色追加到父节点上,把父节点当成新 的当前节点,重新进入算法
• (此变换后性质5不变)
– ⑥插入Z时,最右的叶子结点空间满了,需要进行分裂操作,中间元素T上移到 父节点中,注意通过上移中间元素,树最终还是保持平衡,分裂结果的结点存在 2个关键字元素:
B树的插入示例 5/5
• CNGAHEKQMFWLTZDPRXYS
– ⑦插入D时,导致最左边的叶子结点被分裂,D恰好也是中间元素,上移到父节点中,然 后字母P,R,X,Y陆续插入不需要任何分裂操作(别忘了,树中至多5个孩子):
• 不断插入多个元素的过程
2-3-4树一次完整的插入示例 1/2
• 接上,继续插入元素N、B、X
红黑树的5个性质
1. 2. 3. 4. 5. 每个结点要么是红的,要么是黑的。 根结点是黑的。 每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。 如果一个结点是红的,那么它的俩个儿子都是黑的。 对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数 目的黑结点。
• 二叉空间分区(BSP)树
– 四叉树 八叉树 k树 融合树 区间树 PQ树 Range tree SPQR树 Van Emde Boas tree
• 空间数据分区树
– R树 R*树 R+树 X树 M树 线段树 希尔伯特R树 优先R树
• 其他树
– 堆 散列日历 散列树 Finger tree Order statistic tree Metric tree Cover tree BK树 Doubly chained tree iDistance Link-cut tree Fenwick tree Log-structured merge-tree 树状数组
– ⑧最后,当插入S时,含有N,P,Q,R的结点需要分裂,把中间元素Q上移到父节点中,但
是情况来了,父节点中空间已经满了,所以也要进行分裂,将父节点中的中间元素M上移 到新形成的根结点中,注意以前在父节点中的第三个指针在修改后包括D和G节点中。
B树的删除
• 首先查找B树中需删除的元素
– 如果该元素在B树中存在,则将该元素在其结点中进行删除
– 如果丰满,则向父节点借一个元素来满足条件; – 如果其相邻兄弟都刚脱贫,即借了之后其结点数目小于ceil(m/2)-1,则该结点与 其相邻的某一兄弟结点进行“合并”成一个结点,以此来满足条件。
• 提醒
– B树的第5个特性中的c点: c)除根结点之外的结点(包括叶子结点)的关键字的 个数n必须满足: (ceil(m / 2)-1)<= n <= m-1。m表示最多含有m个孩子,n表 示关键字数。在本小节中举的一颗B树的示例中,关键字数n满足:2<=n<=4
从2-3-4树开始谈起
2-3-4树的查找
2-3-4树的插入 1/3
2-3-4树的插入 2/3
2-3-4树的插入 3/3
• 最大:4-node
– 最多3 keys,4 children
2-3-4树的分裂
• 2-node 变成 3-node
• 3-node 变成 4-node
2-3-4树一次完整的插入示例 1/2
二叉树的插入
• 插入一个节点
红黑树的插入
•
插入一个元素后,需要修复,修复有两种手段
– 重新着色 – 旋转操作:左旋与右旋
红黑树的插入修复代码
• 3种插入修复情况
插入一个元素而后修复的几种情况 1/3
• 插入修复情况 [预处理]
– 插入的是根结点 • 原树是空树,此情况只会违反性质2 – 对策:直接把此结点涂为黑色。
红黑树的删除 5/6
• 删除修复情况3:当前节点颜色是黑+黑,兄弟节点是黑色,兄 弟的左子是红色,右子是黑色。
– 解法:把兄弟结点染红,兄弟左子节点染黑,之后再在兄弟节点为支点 解右旋,之后重新进入算法
• 此是把当前的情况转化为情况4,而性质5得以保持
红黑树的删除 6/6
• 删除修复情况4:当前节点颜色是黑-黑色,它的兄弟节点是黑色,但是兄弟 节点的右子是红色,兄弟节点左子的颜色任意
• 看过了二叉树的插入删除 • 看过了2-3-4树分裂 • 接下来,看另外一种新树
– 它与红黑树最大的区别在于,它的结点可以有许多子女,从几个 到几千个
B树 • 出现缘由
– 二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导 致查询效率低下
一棵B树的示例
• 查找文件29
– 一直往下,3次磁盘IO操作和3次内存查找
B树的插入示例 2/5
• 插入以下字符字母到一棵空的B 树中(非根结点关键字数小了(小于2个) 就合并,大了(超过4个)就分裂): CNGAHEKQMFWLTZDPRXYS
– ①首先,结点空间足够,4个字母插入相同的结点中:
– ②当咱们试着插入H时,结点发现空间不够,以致将其分裂成2个结点,移动中 间元素G上移到新的根结点中,在实现过程中,咱们把A和C留在当前结点中, 而H和N放置新的其右邻居结点中:
• 选择左儿子中的最大元素或者右儿子中的最小元素放到待删除节点的位置,就可以保证结构的不变。
•
RB-Tree删除修复情况 [预处理]
– 当前节点是红+黑色
• 解法,直接把当前节点染成黑色,结束。
– 当前节点是黑+黑且是根节点
• 解法:什么都不做,结束
红黑树的删除修复代码 2/6
• 4种删除修复情况
B树的插入示例 1/5
• 一棵5阶(即树中任一结点至多含有4个关键字,5棵子树)B 树
– 根结点至少得有2个孩子
• one key,two children; • two key,three children; • three key,four children..
– 5阶,2- 4 个key,3-5 个children
[情况1变成了情况2] • 插入修复情况2:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的右子
– 对策:当前节点的父节点做为新的当前节点,以新当前节点为支点左旋(还没完,在情况3中继续)
插入一个元素而后修复的几种情况 3/3
[接情况2]
• 插入修复情况3:当前节点的父节点是红色,叔叔节点是黑色,当前节点是其父节点的左子
– 插入修复情况
• 插入的结点的父结点是黑色。
– 此不会违反性质2和性质4,红黑树没有被破坏。
– 对策:什么也不做。
插入一个元素而后修复的几种情况 2/3
•
插入修复情况1:当前结点的父结点是红色,且叔叔结点(祖父结点的另一个子结点)是红色