平衡二叉树的数据结构_红黑树数据结构

平衡二叉树的数据结构_红黑树数据结构红黑树Java集合系列之TreeMap详细介绍(源码解析)和使用示例代码来自算法第四版红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2n)的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

红黑树

Java 集合系列之 TreeMap详细介绍(源码解析)和使用示例

代码来自算法第四版
红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
红黑树实际上是由2-3-4树转换而来,红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构,能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。

平衡二叉树

在AVL树中任何节点的两个儿子子树的高度最大差别为一,所以它也被称为高度平衡树。
AVL树的定义:
一棵AVL树满足以下的条件:
1>它的左子树和右子树都是AVL树
2>左子树和右子树的高度差不能超过1
性质:
1>一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1)
2>一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)).
3>一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n))。
为了保证平衡,AVL树中的每个结点都有一个平衡因子,它表示这个结点的左、右子树的高度差,AVL树上所有结点的平衡因子值只能是-1、0、1。

红黑树,平衡二叉树对比

  • 红黑树 非严格平衡;平衡二叉树严格平衡。
  • 红黑树结点额外空间 2bit(Red,Black);平衡二叉树结点额外空间3bit(-1,0,1)。
  • 红黑树更新旋转次数,插入最多2次,删除最多3次;平衡二叉树因为严格平衡,插入最多2次,删除可达O(n),被删除结点以上父节点皆有可能旋转。
  • 红黑树查询耗时要比平衡二叉树多

建议使用场景

  • 如果你的应用中,搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。
  • 如果操作序列完全随机,没有任何关系,建议使用普通二叉树BST。
  • 如果操作序列存在一定关系,建议使用红黑树。
  • 如果操作序列完全有序,建议使用平衡二叉树。
  • 如果操作序列存在局部性,建议使用Splay伸展树。
    具体分析,斯坦福有专门的论文分析了BST,AVL,RB Tree,Splay的性能。
    Performance Analysis of BSTs in System Software](http://benpfaff.org/papers/libavl.pdf)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180173.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通用目标检测_ug目标体完全处于工具体内部

    通用目标检测_ug目标体完全处于工具体内部睿智的目标检测-番外篇——数据增强在目标检测中的应用学习前言数据增强做了什么学习前言数据增强是非常重要的提高目标检测算法鲁棒性的手段,学习一下对身体有好处!数据增强做了什么…

    2022年10月10日
    2
  • MATLAB 处理大数据

    MATLAB 处理大数据如何处理大规模的快数据集大数据指的是创建的数据和供分析的数据的数量与速率迅速增加。此趋势的主要驱动因素是不断增加的信息数字化。采集设备的数量和类型以及其他数据生成机制无时无刻不在增加。大数据源包括来自仪表传感器、卫星和医疗图像的流数据,来自安全摄像机的视频以及派生自金融市场和零售运营的数据。上述来源的大数据集可以包含千兆字节或百万兆字节的数据,并且每天以兆字节或千兆字节的级别增长。

    2022年5月23日
    138
  • zabbix监控elasticsearch集群「建议收藏」

    zabbix监控elasticsearch集群「建议收藏」今天同事负责的es集群发生了脑裂,具体原因还有待查看日志。顺便分享一套zabbix监控es集群的脚本。生产改进与建议:所有监控统一status值,比如0是ok的,1是警告,2是error因为es集群会自己维护整个集群的元数据,因此数据收集不是按节点来的而是整个集群现在的配置是从salt的pillar中获取端口(或者说集群名)然后渲染下面的脚本,然后再自动发现集群下面的节点。建议集群也使…

    2022年5月29日
    86
  • golan激活码【在线破解激活】

    golan激活码【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    46
  • 服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作…

    服务器要删除文件访问被拒绝,删除文件提示:文件夹访问被拒绝 需要来自administrator权限执行操作…有时候我们在删除一些系统重要文件,或者被保护的文件的时候,会出现对话框,提示我们您需要来自administrator权限才能对此文件夹进行更改,这是什么原因导致的?今天小编就为大家分析下解决办法。方法/步骤1、右键点击提示我们需要权限的文件夹,然后点击【属性】选项。2、进入文件夹属性界面在上方菜单栏处,找到【安全】选项,然后点击下方的高级选项。3、进入高级选项,点击上方【所有者】,然后点击下方的编…

    2025年7月9日
    2
  • Android 代码混淆

    Android 代码混淆Android代码混淆简介在我们日常开发中,对已经开发完成的源代码,需做一些代码混淆工作,以对代码起到一种保护和降低安装包体积的作用。开启混淆在app的build.gradle文件中如下代码:android{……buildTypes{release{//开启代码混淆minifyEnabledtrue//开启资源混淆,移除未使用的资源shri

    2022年5月30日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号