定理证明
基本概念
树的深度和高度:
树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向上逐层累加的。
证明:内部节点最多,内部节点最少
如果一棵红黑树的黑高为 k,则其内部节点最多为,做少为:
内部节点最多时的情形为:任何一个简单路径上,黑红黑红黑宏,的循环排列,
此时红色节点数目达到最大,树高也达到最大,最大为:2k,此时内部节点为:
2
2
k
−
1
2^{2k}-1
22k−1
内部节点最少时的情形为:全部均是黑色节点的完全二叉树;
此时红色节点数目为 0,树高达到最低,为:k
内部节点数量为:
2
k
−
1
2^k-1
2k−1
证明:最长路径至多是最短路径的两倍
反证法
在一棵红黑树中,从某节点 x 到其后代叶节点的全部简单路径中,最长的一条至多是最短一条的 2 倍。
设最长的路径为
(
a
1
,
a
2
,
…
,
a
s
)
(a1,a2,…,as)
(a1,a2,…,as)
由红黑树的性质:如果一个节点是红色节点,则其两个子节点为黑色节点,⇒ 这条简单路径上至少一半的节点为黑色;
则红色节点的数量:
≤
⌊
s
−
12
⌋
≤⌊s−12⌋
≤⌊s−12⌋,因此黑色节点的数量至少为:
≥
⌈
s
+
12
⌉
≥⌈s+12⌉
≥⌈s+12⌉
设最短的路径为
(
b
1
,
b
2
,
…
,
b
t
)
(b1,b2,…,bt)
(b1,b2,…,bt)
又由红黑树的任何一条简单路径的黑高相同,因此,
t
≥
⌈
s
+
12
⌉
t≥⌈s+12⌉
t≥⌈s+12⌉。然后通过反证法进行证明,
s
>
2
t
s>2t
s>2t所以有:
t
≥
⌈
s
+
12
⌉
≥
⌈
2
t
+
12
⌉
=
t
+
1
t≥⌈s+12⌉≥⌈2t+12⌉=t+1
t≥⌈s+12⌉≥⌈2t+12⌉=t+1
出现矛盾。
证明:一棵有 n 个内部节点的红黑树的高度至多为 2 l g ( n + 1 ) 2lg(n+1) 2lg(n+1)
其中lg lglg是以2为底的对数.
- 首先根据性质我们可以知道一颗红黑树中,任何你个节点x的左子树和右子树各自含有多少个黑色的节点.根据性质5,他们含有的黑色节点数应该相等.而且和父节点含有的节点数之间的关系是相等或-1的关系.(父节点是否是黑节点的不同导致-1)
- 假设我们用bh(x)来表示二叉树当前节点到叶节点所含有的黑色节点个数(不含当前节点).那么可以知道节点x的左子树和右子树的任何一条到叶子节点的路径都含有的黑色节点数为 b h ( x ) bh(x) bh(x)或 b h ( x ) − 1 bh(x)−1 bh(x)−1
- 由此可见一个红黑树的节点数至少含有 2 b h ( t ) − 1 2^{bh(t)}−1 2bh(t)−1个.其中t是这颗红黑树的根节点.
- 又因为 b h ( t ) bh(t) bh(t)和二叉树整体高度 h ( t ) h(t) h(t)含有一定的关系.这个关系式 h ( t ) / 2 ⩽ b h ( t ) h(t)/2⩽bh(t) h(t)/2⩽bh(t)(由红黑树的性质4可得).这样算来可以获得不等式
n
⩾
2
b
h
(
t
)
−
1
⩾
2
h
(
t
)
/
2
−
1
n⩾2^ {bh(t)−1} ⩾2 ^{h(t)/2}−1
n⩾2bh(t)−1⩾2h(t)/2−1
由此推出
h
(
t
)
⩽
2
l
g
(
n
+
1
)
h(t)⩽2lg(n+1)
h(t)⩽2lg(n+1)
参考: https://blog.csdn.net/luixiao1220/article/details/104648112/
参考: https://blog.csdn.net/lanchunhui/article/details/75905478