当前课程知识点:数据结构(下) > 第八章 高级搜索树(下) > (xa2)红黑树:结构 > 08XA2-6 平衡性
既然我们已经看到 红黑树与4阶B树彼此等价
那么由B树的平衡性也不难理解红黑树的平衡性
如果你愿意花费一些时间
我们这里不妨更为严谨的来证明这一点
某种意义上讲 给出这种证明是值得的
因为它可以帮助我们更好的理解红黑树
为此我们只需证明由n个内部节点所构成的任何一棵红黑树
其高度在渐近意义下都不超过logn
当然与所有的BST一样 拥有n个内部节点的红黑树
也必然同时拥有恰好n+1个外部节点
具体的 我们只需证明这个串联的不等式
或者更准确的讲 我们只需证明右侧的这个不等号
因为左侧的这个 是任何BST都自然而然满足的
假设这就是一个红黑树 按照规则
在从根节点出发 通往任何一个外部节点的沿途
所经过的黑节点总数 必然总是一样的
比如就在这棵红黑树中 如果忽略掉人为引入的外部节点
那么每一条这样的路径上所包含的黑节点应该恰好为6个
也就是说 任何一条这样的极长通路上
所含黑节点的总数都应该是6
此时我们就称这棵红黑树的黑高度为6
尽管加上3个红色的节点 它的高度可以达到9
我们知道 所谓的树高
也就是全树中最深节点所对应那条通路的长度
而在红黑树中 任何一条通路上
尽管可能出现相邻的黑节点
却不允许出现相邻的红色节点
进一步的 这就意味着
在每一条这样的通路上 红色节点都不到一半
而黑色节点都至少占一半
因此红黑树的高度 必然不会超过其黑高度的2倍
那么这里的黑高度 又当如何度量呢
你应该还记得提升变换 没错正是提升变换
我们知道经过提升变换之后
每一棵红黑树都对应于一棵4阶的B树
在这样一棵B树中 所有的外部节点 都像这个那样
平齐的分布于底层
而其中的每一个内部节点
都是由此前的某个黑父亲以及他的红孩子构成
因此此前红黑树中的每一条路径
也相应的会在B树中对应于一条路径
原先这条路径上有多少个黑节点
在B树中对应的那条路径就有多长
这就意味着 这棵B树的高度
应该不多不少恰好正是此前那棵红黑树的黑高度
没错 B树的高度 恰恰正是其对应的红黑树的黑高度
而为了度量一棵红黑树的黑高度
我们只需去度量其对应的那棵B树的高度即可
那么B树的高度应该如何度量呢
我们在此前已经做过介绍
这里我们只需将结果拿过来 也就是这个
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试