数据结构与算法之美 | 学习笔记21 —— 红黑树基础

在二叉查找树的频繁动态更新过程中,可能会出现树高远大于 l o g 2 n log_2n log2n的情况。平衡查找二叉树可以解决这个问题。

一、红黑树

1. 平衡二叉查找树定义

平衡二叉查找树:二叉树中任意一个节点的左右子树的高度相差不能大于1. 完全二叉树、满二叉树都是平衡二叉树,但是非完全二叉树也有可能是平衡二叉树。对于定义,有些平衡二叉查找树没有完全遵循
平衡二叉树

2. 红黑树(Red-Black Tree)定义

红黑树是个明星树,是一种不严格符合定义的平衡二叉查找树。
对于一颗红黑树:

  1. 根节点是黑色的;
  2. 每个叶子节点都是黑色的空节点(NIL),也就是叶子结点不存储任何数据;
  3. 任何相邻的节点都不能同时为红色;
  4. 每个节点,从该节点到达其可叶子结点的所有路径,都包含相同数目的黑色节点。

对于要求2,是为了简化红黑树的代码实现而设置的,此节暂不考虑也不标出这一点。
红黑树示例:
红黑树

3. 红黑树的高度分析

将红色节点去掉,二叉树就变成了四叉树:
去掉红色节点
因为第4条的规定,从任意节点到可达叶子结点的每个路径,包含相同数目的黑色节点,那么这个分离后的四叉树,类似一个完全二叉树。因为一个完全二叉树的高度近似 l o g 2 n log_2n log2n, 这里去掉红色节点的“黑树”高度也不会超过 l o g 2 n log_2n log2n
将红色节点加回去后,最长路径就不会超过 2 l o g 2 n 2log_2n 2log2n. 也即红黑树的高度约为 2 l o g 2 n 2log_2n 2log2n.

二、各种平衡查找二叉树的对比

  1. Treap, Splay Tree的操作效率很高,但无法避免极端情况下时间复杂度的退化,对于单次操作时间敏感的场景不适用。
  2. AVL这种弄高度平衡的二叉树,因为要维持高度平衡,每次插入、删除要做调整,适合不需频繁插入、删除的数据集合。
  3. 红黑树是这两种的一种折中,性能稳定,适合工业级应用。

关于红黑树的演变由来,可以参照 https://www.cnblogs.com/tiancai/p/9072813.html 。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值