当前课程知识点:数据结构(下) > 第八章 高级搜索树(下) > (xa3)红黑树:插入 > 08XA3-4 RR-1
先来考虑第一种情况 叔父节点u是黑的
依然考察x p和g这祖孙三代节点
它们可能的位置关系 同样包括zig zag之类的4种组合
在这里我们只考虑zig-zig和zag-zig两种情况
另外两种完全对称
无论哪种情况 此时的x p g下属都应该有4个直接的孩子
尽管它们都有可能是外部节点
但是根据红黑树红节点只能有黑孩子的规则
包括u在内 它们都必然是黑的
而且既然在此前 这是一棵合法的红黑树
这4个黑节点的黑高度也应该是一样的
为了更好的来理解此时的双红缺陷
无论是它还是它 我们不妨借助此前的提升变换
也就是将此前指向红色节点的所有虚边都收缩起来
于是局部的这祖孙三代节点
就会合并为一个4阶B树中的超级节点
这种情况下的祖孙三代也是如此
乍看起来 这样的超级节点并没有违规
因为它们下属的分支都不超过4阶B树的上限
是的 其实此时的缺陷并不严重
确切的说 唯一的缺陷只是在每个超级节点中
居中的这个关键码不是黑色
因此从B树的角度看 这种调整非常简明
我们并不需要调整B树的拓扑结构
而只需在违规的超级节点中对关键码重新的染色
比如对于这种情况而言 只需简明的交换p和g的颜色即可
而这种情况的 只需简明的交换x和g的颜色即可
将另外两种尚未列出的情况一并考虑
实际上只需沿用此前针对AVL树所设计的3+4重构算法
即可统一的处理这种类型的所有情况
具体的只需找到x p g这3个节点及其下属的4棵子树
按照中序遍历的次序重新命名
并对这一局部 按这一种模式重新的拓扑连接
当然这里还需要做进一步的重染色
而各种重染色操作呢
也可以统一为将居中的节点b染黑
将其左右两个孩子染红 整个调整过程以及效果
从B树的角度来看 是非常清晰明了的
双红缺陷之所以是非法的 从B树的角度看
可以认为是因为在某个原本是3叉的节点中
插入了一个红色的关键码
从而使得原先的黑关键码不再居中
对照所有的4种情况 不难验证这一点
而调整之后的效果呢
相当于B树的拓扑结构不变 而在对应的4叉节点中
三个关键码的颜色已经改为合法的红黑红模式
请注意在这种情况下 尽管红黑树的拓扑结构有所调整
但仅限于局部
而更重要的是 这种调整是一蹴而就的
无需任何进一步的调整
因此就全树的拓扑连接关系变化量而言
必然是不超过常数
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试