红黑树的高度

     在复习红黑树的特性时,产生了这样的一个疑问,红黑树的高度是多少呢?在Java8,HashMap所使用的拉链法散列表中,如果储存元素的键值与原来储存元素的键值发生了Hash冲突,如果val值不一样,会将该元素存放在红黑树的数据结构中。

    红黑树查找一个元素所需要的时间最坏是2lgN,插入一个元素最坏情况所需要的时间是2lgN,查找命中所需要的平均时间是lgN,插入一个元素所需要的平均时间也是lgN.首先,说一说红黑树的特性:

  (1)红黑树的根节点是黑色的

   (2)红节点都出现在左链接中

  (3)不可以出现连续两个红色的左连接 

  (4)红黑树是完美黑色平衡的,即任意空连接到根节点的路径上的黑连接数量相同。

其实(2)(3)两点可以归纳成一个点:一个红色节点的左右两个子节点必定是黑色的。

二,红黑树为什么能保证各项基本操作的时间复杂度为对数级O(logN)

现在来证明为什么红黑树的高度是logN级别的。

证明:一棵有 n 个内结点的红黑树的高度至多是 2log(n+1),只需要证明它的逆否命题高度为h的红黑树,节点个数最少是2^(h/2)-1;

叶结点:数据域为NIL的结点。内结点(非叶结点):数据域不为NIL的结点。红黑树中每个结点有五个域(字段):①颜色  ②数据域(key) ③左指针  ④右指针  ⑤父结点指针

首先定义一个黑高度概念:从某个结点 x 出发,到达一个叶结点的任意一条路径上,黑色结点的个数 称为黑高度。记为 bh(x)

其次,假设红黑树的高度为h(根结点的高度为0),由性质(2)(3)可知:从根结点(不包括根)到叶结点的任一简单路径上至少有一半的结点是黑色的,从而根的黑高度至少是 h/2。因此我们只需要证明黑高度为bh(x)的红黑树,节点至少为2^(bh(x))-1个。

根据数学归纳法证明

O(1)当黑高度为0 时,节点个数最少为 0

O (2) 当黑高度为1时,节点个数至少为1

O(h-1)当黑高度为h-1时,节点个数至少为2^(h-1)-1

证明:当红黑树Tree黑高度为h时,节点个数至少为2^(bh(x))-1,Tree的左子树的黑高度为h-1,Tree的右子树的黑高度为h-1,根据特性(4)得出,根据O(h-1)左子树的节点个数至少为 2^(h-1)-1个,右子树的节点个数至少为2^(h-1)-1个,所以该红黑树的节点个数至少为2^(h-1)-1+2^(h-1)-1+1=2^(h)-1.。

从而有: n >= 2^(h/2) -1,  得出 h <= 2log(n+1),从而证明了红黑树的高度是O(logN)。

  

  

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值