为什么说红黑树是“近似平衡”的?
我们前面也讲到,平衡二叉查找树的初衷,是为了解决二叉查找树因为动态更新导致的性能退化问题。所以,“平衡”的意思可以等价为性能不退化
。
“近似平衡”就等价为性能不会退化得太严重
。二叉查找树很多操作的性能都跟树的高度成正比。一棵极其平衡的二叉树(满二叉树或完全二叉树)的高度大约是 log2n
,所以如果要证明红黑树是近似平衡的,我们只需要分析,红黑树的高度是否比较稳定地趋近 log2n 就好了
红黑树的高度不是很好分析,我带你一步一步来推导。
首先,我们来看,如果我们将红色节点从红黑树
中去掉,那单纯包含黑色节点的红黑树的高度是多少呢?
红色节点删除之后,有些节点就没有父节点了,它们会直接拿这些节点的祖父节点(父节点的父节点)作为父节点
。所以,之前的二叉树就变成了四叉树。
前面红黑树的定义里有这么一条:从任意节点到可达的叶子节点的每个路径包含相同数目的黑色节点。我们从四叉树中取出某些节点,放到叶节点位置,四叉树就变成了完全二叉树。所以,仅包含黑色节点的四叉树的高度,比包含相同节点个数的完全二叉树的高度还要小
。
上一节我们说,完全二叉树的高度近似 log2n
,这里的四叉“黑树”的高度要低于完全二叉树,所以去掉红色节点的“黑树”的高度也不会超过 log2n
。
我们现在知道只包含黑色节点的“黑树”的高度,那我们现在把红色节点加回去,高度会变成多少呢?
从上面我画的红黑树的例子和定义看,在红黑树中,红色节点不能相邻,也就是说,有一个红色节点就要至少有一个黑色节点,将它跟其他红色节点隔开。红黑树中包含最多黑色节点的路径不会超过 log2n,所以加入红色节点之后,最长路径不会超过 2log2n,也就是说,红黑树的高度近似 2log2n。
所以,红黑树的高度只比高度平衡的 AVL 树的高度(log2n)
仅仅大了一倍,在性能上,下降得并不多。这样推导出来的结果不够精确,实际上红黑树的性能更好。
总结
近似平衡
就是说时间复杂度和一般的平衡二叉树差距不大- 红黑树的时间复杂度为
O(lgn)
参考
为什么说红黑树是“近似平衡”的?相关推荐
- 2021-10-15 红黑树 概念和平衡操作理解以及与AVL对比分析 恋上数据结构笔记
文章目录 红黑树的由来 红黑树需要遵守的五大规则 红黑树与4阶B树的相互转换!! 红黑树的插入(12种情况) 红黑树的删除(3大类情况) 红黑树的平衡 以及与AVL树的性能比较 红黑树的由来 红黑树: ...
- 红黑树:自平衡的二叉查找树
前一篇博文中写道,二叉查找树是一种具有较高性能的符号表实现,在理想情况下它可以保证查找.插入和删除操作的时间复杂度在对数级别.二叉查找树可以动态地插入和删除元素,在插入和删除操作的过程中,二叉查找树的 ...
- 红黑树 平衡二叉搜索树_红黑树:自我平衡的二叉搜索树,并举例说明
红黑树 平衡二叉搜索树 什么是红黑树? (What is a Red-Black Tree?) Red-Black Tree is a type of self-balancing Binary Se ...
- 为什么红黑树查询快_为什么工程中都喜欢用红黑树,而不是其他平衡二叉查找树呢?...
前言 二叉查找树是最常用的一种二叉树,它支持快速插入.删除.查找操作,各个操作的时间复杂度跟树的高度成正比,理想情况下,时间复杂度是O(logn). 不过,二叉查找树在频繁的动态更新过程中,可能会出现 ...
- 【二叉树进阶】红黑树(Red Black Tree) - 平衡二叉搜索树
文章目录 一.红黑树的概念 二.红黑树的性质 2.1 红黑树和AVL树效率对比 三.红黑树的结构(KV模型) 四.红黑树的插入 4.1 插入节点 4.2 平衡化操作(难点) 4.2.1 情况一 4.2 ...
- 【数据结构与算法】平衡二叉树、红黑树
1.树.二叉树 2.二叉查找树 3.平衡二叉树.红黑树 4.递归树 一,什么是"平衡二叉查找树" 1,定义:二叉树中任意一个节点的左右子树的高度相差不能大于1. 所以:完全二叉树, ...
- 他一口气写出了这7k字的红黑树总结!看过的都说好!!|文末送书
△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 244篇原创分享 作者 l shanhm1991 来源 l Hollis(ID:hollischuang) 红黑树是一种很 ...
- 算法高级(26)-在Java8中为什么要使用红黑树来实现的HashMap?
一.前言 在jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度. 二.红黑树回顾 红黑树的英文是"Red-Black Tr ...
- HashMap为什么用链表加红黑树?目的是什么?原理是什么
关于HashMap的详解文章: 链接: HashMap源码研究--源码一行一行的注释 文章目录 1为什么用链表? 2为什么用红黑树? 2.1 红黑树概述 2.2 红黑树性质 为什么满足上面的性质,红黑 ...
最新文章
- java 并发编程第七章:取消和关闭
- 页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
- 数据加解密和数据签名验签
- SubSonic框架使用图解
- Spark的event事件监听器LiveListenerBus和特质SparkListenerBus以及特质ListenerBus
- 【前端 · 面试 】HTTP 总结(八)—— HTTP 强缓存
- 装饰模式/适配器模式/代理模式
- java笔记之字符串,字符串数组,ListString的相互转换
- 使用Carbide进行调试时免除重新启动模拟器的一种方法(转)
- Layer 引入自定义模块
- maven配置访问nexus私服,从nexus私服下载依赖
- RS485电路及隔离技术(收藏)
- js逆向学习路线指南
- k3s部署思源并用流水线同步笔记
- Android Path之Direction.CW、Direction.CCW
- 程序员的“我爱你”表达方式
- 超大模型分布式训练DeepSpeed教程
- 企业单方调岗降薪,务工者不服离职索赔
- 5分钟搞懂什么是深度学习
- 电脑html动态桌面壁纸制作,电脑如何制作动态壁纸_电脑上怎么搞动态壁纸-win7之家...
热门文章
- java getchild_Java IFileStore.getChild方法代碼示例
- big sur支持机型_小米10 Pro官方下架:高端在售机型只剩它
- 已解决:home目录下ubuntu文件夹被误删。。。。
- (已解决) centos6.5 yum源 失效 The whole CentOS 6 is dead and shouldn’t be used anywhere at all
- 全连接层和卷积层最终应用在网络上的不同之处
- plsql tables 没有表_技术分享 | 在磁盘上查找 MySQL 表的大小
- centos java 路径_CentOS JAVA安装及查看路径方法
- ios html转json,iOS 中 Model 和 JSON 互相转换
- php中如果想要打印出来的结果换行怎么操作_现在,就要对文件的批操作,动刀子啦!!!...
- wince 内存释放_【转载】让我生不如死的WINCE内存泄漏