【Data Structure】红黑树理解

1.什么是红黑树

  我们知道一棵高度为h的二叉搜索树的大部分操作时间复杂度是O(h),但是如果搜索树较高,极端情况下就是一条链表了,二叉搜索的意义就不大了。而红黑树是一颗二叉搜索树,也是多种平衡搜索树的一种,可以保证最坏情况下时间复杂度为O(lgn)。对于一棵有n个内部节点的红黑树的高度最多为2lg(n+1),高度的证明不难,请参考算法导论。

 

2.红黑树的五大性质

  这五大性质非常重要,想要明白红黑树,这五个性质请大家必须牢记。一棵红黑树是满足下面红黑性质的二叉搜索树:

1. 每个节点或是红色的,或是黑色的

2. 根节点是黑色的

3.每个叶节点(NIL)是黑色的

4.如果一个节点是红色的,则它的两个子节点都是黑色的

5.对于每个几点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

关于性质一,第一眼看着好像就是废话没啥用,其实到了后面删除操作的时候就看出这个性质是很微妙的。这里还有两个概念,一个是哨兵节点,为了方便处理边界条件以及方便描述,我们把不需要关注的叶子节点和null节点统一用一个特殊节点表示,我们称它为哨兵节点,记为T.NIL。一个是黑高,从某个节点x出发(不含该节点)达到一个叶节点的任意一条简单路径上的黑色节点个数称为该节点的黑高。下面展示一棵普通的红黑树:

 

3.旋转操作

   在红黑树进行新增节点或者删除节点的时候,有可能改变了红黑树的五大性质,所以我们需要对红黑树进行调整,左旋转(LEFT-ROTATE)和右旋转(RIGHT-ROTATE)是极其重要的两个操作。通过旋转和调整颜色可以恢复红黑树的五大性质。如下图所示,右旋转a节点会以a为中心,把它的左孩子b旋转为树根,然后把左孩子b的右孩子作为a的左孩子。右旋转则刚刚好相反。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值