数据结构学习笔记 - 红黑树

红黑树

一般讲到平衡二叉查找树, 都会拿红黑树作为例子, 工程中, 很多用到平衡二叉查找树的地方都会用到红黑树
但凡用到动态插入, 删除, 查找数据的场景, 都可以用到它, 不过自己实现起来难度有点高

什么是平衡二叉查找树

平衡二叉树定义: 二叉树中任意一个节点的左右子树的高度相差不能大于1.
完全二叉树, 满二叉树, 都是平衡二叉树

平衡二叉查找树不仅满足上面定义, 还满足二叉查找树的特点
最先被发明的平衡二叉查找树是AVL树

但很多平衡二叉查找树并没有严格符合上面的定义, 比如红黑树
设计初衷是解决, 普通二叉查找树在频繁的插入, 删除等动态更新的情况下, 出现时间复杂度退化的问题
平衡二叉查找树就是让整棵树左右看起来比较平衡, 不要出现左子树高右子树矮的情况, 这样能让整棵树的高度相对低一些, 相应的插入删除查找操作效率高一些.

定义一棵红黑树

红黑树(Red-Black Tree), 简称R-B Tree, 是一种不严格的平衡二叉查找树
红黑树的节点, 一类被标记为黑色, 一类被标记为红色, 且要满足

  • 根节点是黑色的
  • 每个叶子节点都是黑色的空节点, 即叶子节点不存储数据
  • 任何相邻节点都不能同时为红色, 即红色节点是被黑色节点隔开的
  • 每个节点, 从该节点到达其可到达叶子节点的所有路径, 都包含相同数目的黑色节点

为什么用红黑树

为什么用红黑树不用其他平衡二叉查找树
Treap, Splay Tree无法避免极端情况下时间复杂度的退化
AVL树查找效率非常高, 但为了维护这种高度平衡, 每次插入删除都要调整, 比较复杂耗时, 对于有频繁插入删除操作的数据集合, 使用AVL树代价有点高
红黑树只做到了近似平衡, 在维护平衡成本上比AVL树要低, 且插入删除查找操作性能都比较稳定, 对于工程应用要面对各种异常情况, 所以更倾向于这种性能稳定的

实现一棵红黑树 (不是

大可不必, 左右旋背个滚瓜烂熟过几天就忘
红黑树的叶子节点都是黑色的空节点, 是为了方便代码实现, 方便套用平衡公式
红黑树平衡过程类似魔方复原, 有几个公式, 在插入删除节点过程中, 会破坏红黑树定义的第三四条, 所以使用平衡公式来恢复
插入操作平衡公式有三个, 删除操作平衡公式有七个, 插入操作的平衡调整比较简单, 但删除操作就比较复杂
详细实现步骤, 用到以后再去搜, 对照着实现即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值