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

平衡二叉树的数据结构_红黑树数据结构红黑树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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python之numpy的基本使用

    python之numpy的基本使用一 numpy 概述 numpy 模块提供了 python 对 N 维数组对象的支持 ndarray ndarray 数组中的元素须为同一数据类型 这一点与 python 的列表是不一样的 numpy 支持高级大量的维度数组与矩阵运算 此外也针对数组运算提供大量的数学函数库 二 创建 ndarray 数组代码示例 coding utf 8 importnumpy print 使用列表生成一维数组 d

    2025年12月10日
    2
  • 数据的同步为每个站点创建触发器同步表

    数据的同步为每个站点创建触发器同步表

    2022年1月10日
    40
  • php开发在线客服系统_app内在线客服

    php开发在线客服系统_app内在线客服  在本节中,我们将简要讨论通过PHP在线客服系统源码传输数据的数据传输方法。我们可以发送普通消息或基于时间表的消息。我们将逐一介绍这两种基本类型的消息传递。  完整源码:zxkfym.top  Azure服务总线:MicrosoftAzure服务总线是一种完全托管的云上企业集成消息传递服务,用于将云中运行的任何应用程序、设备和服务连接到任何其他应用程序或服务。该平台充当云上和任何设备上的应用程序的消息传递骨干。  它是如何工作的?使用消息在不同的应用程序和服务之间传输数据。消息为二进制格

    2025年11月30日
    12
  • 关于cpu流水线的各阶段周期,吞吐率计算问题

    关于cpu流水线的各阶段周期,吞吐率计算问题本人在复习计组流水线时,遇到了一些问题,再次记录,以备不时之需。首先要弄明白一点,那就是cpu的各阶段是否具有相同的时钟周期,也就是说,每个阶段所花费的时间是否都是相同的?为什么会想到这个问题,先看一下408统考真题的这一题:刚开始那是想都没想,这他么这么简单的题,肯定选A啊,虽然的确做对了,但分析这道题所考的知识点时,想的就多了,为什么时钟周期不能小一点,比如为50ns,让每个阶段所占用两个时钟周期不就得了,但是这时候脑子突然想到,cpu流水线的每个阶段是不是必须是一个时钟周期啊?这时候,

    2022年8月22日
    6
  • 全面认识基站_移动基站设备认识

    全面认识基站_移动基站设备认识文章目录一、全面认识基站1.1基站的定义1.2基站的分类1.3基站的组成一、全面认识基站1.1基站的定义基站(BaseStation),即公用移动通信基站,实现了有线通信网络与无线终端之间的无线信号传输,是无线终端(如手机)接入互联网的接口设备。1.2基站的分类基站按照站型大小和功率可以大致分为:宏基站、微基站、皮基站、飞基站。宏基站主要用于室外覆盖,体型大、覆盖面积广。微基站通常指在楼宇中或人口密集区安装的小型基站。这种基站的体积小、覆盖面积小,承载的用户量比较低。皮基

    2025年7月21日
    4
  • jdbc和数据库连接池_常用的数据库连接池

    jdbc和数据库连接池_常用的数据库连接池数据库连接池JDBC数据库连接池的必要性在使用开发基于数据库的web程序时,传统的模式基本是按照以下步骤:在主程序(如servlet beans)中建立数据库连接进行sql操作断开数据库连接这种模式开发,存在的问题:普通的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,再验证用户名和密码(大概花费0.05s-1s),需要数据库连接的时候,就向数据库要求一个,执行完成后再断开。这样的方式将会消耗大量的时间。数据库的

    2022年8月8日
    4

发表回复

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

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