我们前面也讲到,平衡二叉查找树的初衷,是为了解决二叉查找树因为动态更新导致的性能退化问题。所以,“平衡”的意思可以等价为性能不退化

“近似平衡”就等价为性能不会退化得太严重。二叉查找树很多操作的性能都跟树的高度成正比。一棵极其平衡的二叉树(满二叉树或完全二叉树)的高度大约是 log2n,所以如果要证明红黑树是近似平衡的,我们只需要分析,红黑树的高度是否比较稳定地趋近 log2n 就好了

红黑树的高度不是很好分析,我带你一步一步来推导。

首先,我们来看,如果我们将红色节点从红黑树中去掉,那单纯包含黑色节点的红黑树的高度是多少呢?

红色节点删除之后,有些节点就没有父节点了,它们会直接拿这些节点的祖父节点(父节点的父节点)作为父节点。所以,之前的二叉树就变成了四叉树。


前面红黑树的定义里有这么一条:从任意节点到可达的叶子节点的每个路径包含相同数目的黑色节点。我们从四叉树中取出某些节点,放到叶节点位置,四叉树就变成了完全二叉树。所以,仅包含黑色节点的四叉树的高度,比包含相同节点个数的完全二叉树的高度还要小

上一节我们说,完全二叉树的高度近似 log2n,这里的四叉“黑树”的高度要低于完全二叉树,所以去掉红色节点的“黑树”的高度也不会超过 log2n

我们现在知道只包含黑色节点的“黑树”的高度,那我们现在把红色节点加回去,高度会变成多少呢?

从上面我画的红黑树的例子和定义看,在红黑树中,红色节点不能相邻,也就是说,有一个红色节点就要至少有一个黑色节点,将它跟其他红色节点隔开。红黑树中包含最多黑色节点的路径不会超过 log2n,所以加入红色节点之后,最长路径不会超过 2log2n,也就是说,红黑树的高度近似 2log2n。

所以,红黑树的高度只比高度平衡的 AVL 树的高度(log2n)仅仅大了一倍,在性能上,下降得并不多。这样推导出来的结果不够精确,实际上红黑树的性能更好。

总结

  • 近似平衡就是说时间复杂度和一般的平衡二叉树差距不大
  • 红黑树的时间复杂度为O(lgn)

参考

为什么说红黑树是“近似平衡”的?相关推荐

  1. 2021-10-15 红黑树 概念和平衡操作理解以及与AVL对比分析 恋上数据结构笔记

    文章目录 红黑树的由来 红黑树需要遵守的五大规则 红黑树与4阶B树的相互转换!! 红黑树的插入(12种情况) 红黑树的删除(3大类情况) 红黑树的平衡 以及与AVL树的性能比较 红黑树的由来 红黑树: ...

  2. 红黑树:自平衡的二叉查找树

    前一篇博文中写道,二叉查找树是一种具有较高性能的符号表实现,在理想情况下它可以保证查找.插入和删除操作的时间复杂度在对数级别.二叉查找树可以动态地插入和删除元素,在插入和删除操作的过程中,二叉查找树的 ...

  3. 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明

    红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...

  4. 为什么红黑树查询快_为什么工程中都喜欢用红黑树,而不是其他平衡二叉查找树呢?...

    前言 二叉查找树是最常用的一种二叉树,它支持快速插入.删除.查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn). 不过,二叉查找树在频繁的动态更新过程中,可能会出现 ...

  5. 【二叉树进阶】红黑树(Red Black Tree) - 平衡二叉搜索树

    文章目录 一.红黑树的概念 二.红黑树的性质 2.1 红黑树和AVL树效率对比 三.红黑树的结构(KV模型) 四.红黑树的插入 4.1 插入节点 4.2 平衡化操作(难点) 4.2.1 情况一 4.2 ...

  6. 【数据结构与算法】平衡二叉树、红黑树

    1.树.二叉树 2.二叉查找树 3.平衡二叉树.红黑树 4.递归树 一,什么是"平衡二叉查找树" 1,定义:二叉树中任意一个节点的左右子树的高度相差不能大于1. 所以:完全二叉树, ...

  7. 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书

    △Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 244篇原创分享 作者 l shanhm1991 来源 l Hollis(ID:hollischuang) 红黑树是一种很 ...

  8. 算法高级(26)-在Java8中为什么要使用红黑树来实现的HashMap?

    一.前言 在jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度. 二.红黑树回顾 红黑树的英文是"Red-Black Tr ...

  9. HashMap为什么用链表加红黑树?目的是什么?原理是什么

    关于HashMap的详解文章: 链接: HashMap源码研究--源码一行一行的注释 文章目录 1为什么用链表? 2为什么用红黑树? 2.1 红黑树概述 2.2 红黑树性质 为什么满足上面的性质,红黑 ...

最新文章

  1. java 并发编程第七章:取消和关闭
  2. 页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
  3. 数据加解密和数据签名验签
  4. SubSonic框架使用图解
  5. Spark的event事件监听器LiveListenerBus和特质SparkListenerBus以及特质ListenerBus
  6. 【前端 · 面试 】HTTP 总结(八)—— HTTP 强缓存
  7. 装饰模式/适配器模式/代理模式
  8. java笔记之字符串,字符串数组,ListString的相互转换
  9. 使用Carbide进行调试时免除重新启动模拟器的一种方法(转)
  10. Layer 引入自定义模块
  11. maven配置访问nexus私服,从nexus私服下载依赖
  12. RS485电路及隔离技术(收藏)
  13. js逆向学习路线指南
  14. k3s部署思源并用流水线同步笔记
  15. Android Path之Direction.CW、Direction.CCW
  16. 程序员的“我爱你”表达方式
  17. 超大模型分布式训练DeepSpeed教程
  18. 企业单方调岗降薪,务工者不服离职索赔
  19. 5分钟搞懂什么是深度学习
  20. 电脑html动态桌面壁纸制作,电脑如何制作动态壁纸_电脑上怎么搞动态壁纸-win7之家...

热门文章

  1. java getchild_Java IFileStore.getChild方法代碼示例
  2. big sur支持机型_小米10 Pro官方下架:高端在售机型只剩它
  3. 已解决:home目录下ubuntu文件夹被误删。。。。
  4. (已解决) centos6.5 yum源 失效 The whole CentOS 6 is dead and shouldn’t be used anywhere at all
  5. 全连接层和卷积层最终应用在网络上的不同之处
  6. plsql tables 没有表_技术分享 | 在磁盘上查找 MySQL 表的大小
  7. centos java 路径_CentOS JAVA安装及查看路径方法
  8. ios html转json,iOS 中 Model 和 JSON 互相转换
  9. php中如果想要打印出来的结果换行怎么操作_现在,就要对文件的批操作,动刀子啦!!!...
  10. wince 内存释放_【转载】让我生不如死的WINCE内存泄漏