红黑树(AVL树的优化)上

这篇具有很好参考价值的文章主要介绍了红黑树(AVL树的优化)上。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

红黑树略胜AVL树

AVL树是一颗高度平衡搜索二叉树: 要求左右高度差不超过1(严格平衡)

有的大佬认为AVL树太过严格,对平衡的要求越严格,会带来更多的旋转(旋转也还是会有一定的消耗!!)

红黑树的出发点:最长路径不超过最短路径的2倍(近似平衡)

相对而言,插入同样的数据,AVL树旋转更多,红黑树旋转更少(这是优势)

红黑树的劣势:

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 我们在进行查找的时候,我们AVL树最多查找20次左右

红黑树最多查找40次左右

虽然红黑树查找的次数比AVL树多,但是红黑树在插入过程中的旋转更少,更占优势

红黑树的概念

红黑树,是一种搜索二叉树,单在每个节点上增加一个存储位表示节点的颜色,可以是Red或Block,通过对任何一条从根到路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因而是接近平衡的

红黑树(AVL树的优化)上,数据结构高阶,数据结构

1.每一个节点不是红色就是黑色

2.根节点是黑色的

3.如果一个节点是红的,那么它的两个孩子节点是黑色的

解读  :   树中没有连续的红色节点

4.对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含有相同的数目的黑色节点

解读  : 每条路径的黑色节点数量相等

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 5.每个叶子节点都是黑色的(此处的叶子节点指的是空节点NIL节点)

为什么这里指的是空节点呢??

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 为什么满足上面性质,红黑树就能保证 : 其最长路径中节点个数不会超过最短路径节点个数的两倍??

因为每条路径上都有相同数量的黑节点  所以:

这颗树最短路径  :  一定是全黑

           最长路径  :  一定是一黑一红

这样最短路径一定不超过最长路径的二倍

红黑实现代码

我们在新插入的节点是应该选择红色还是黑色呢??

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 我们来看看插入红色,会是什么样??

红黑树(AVL树的优化)上,数据结构高阶,数据结构

发现如果插入黑色一定挨打,如果插入红色有可能不用挨打,拍拍屁股就走人了,就算是挨打,也不用太大费周章的解决

红黑树(AVL树的优化)上,数据结构高阶,数据结构

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 叔叔也是红的,那我把叔叔也变黑,祖父变红

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 如果这时候  25就是这颗树的根,就结束了,没必要在往后走了(再像办法把25变为黑的)

红黑树(AVL树的优化)上,数据结构高阶,数据结构

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 红黑树(AVL树的优化)上,数据结构高阶,数据结构

 这时候我们发现还有一个小问题,grandfather变成红了,但是grandfather这时候是根,根不能是红的,我们还得把grandfather变成黑,即可

我们上面的过程,红黑树的插入问题可能光变色就够了,插入节点之后最短并没有超过最长的2倍,也不需要旋转,降长度

------------------------------------------------------------------------------------------------------------------

一下这种情况就需要旋转加变色了

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 ------------------------------------------------------------------------------------------------------------------------------

情况一 : cur为红,p为红,g为黑,u存在且为红

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 具像图一:

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 具像图二:
红黑树(AVL树的优化)上,数据结构高阶,数据结构

 总共有  4*4*4*4(在ab的任意位置插入,有4种情况) =256 种组合

这些情况是无穷无尽的!!!

有可能 a b下面还有一个黑节点,那么cde的子树就是有两个黑节点的子树了,情况是无穷无尽的了

红黑树(AVL树的优化)上,数据结构高阶,数据结构

---------------------------------------------------------------------------------------------------------------------------

情况二  :   还有的情况是光变色解决不了的!!!!

cur为红,p为红 , g为黑,u不存在  /   u存在且为黑

红黑树(AVL树的优化)上,数据结构高阶,数据结构

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 红黑树(AVL树的优化)上,数据结构高阶,数据结构

 红黑树(AVL树的优化)上,数据结构高阶,数据结构

情况三:就是情况二再变形

双旋 + 变色

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 情况一变过来之后,我们看叔叔的情况!!!

红黑树(AVL树的优化)上,数据结构高阶,数据结构

 红黑树(AVL树的优化)上,数据结构高阶,数据结构文章来源地址https://www.toymoban.com/news/detail-684618.html

到了这里,关于红黑树(AVL树的优化)上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python - 深夜数据结构与算法之 AVL 树 & 红黑树

    目录 一.引言 二.高级树的简介 1.树 2.二叉树 3.二叉搜索树 4.平衡二叉树 三.AVL 树 ◆ 插入节点 ◆ 左旋 ◆ 右旋 ◆ 左右旋 ◆ 右左旋 ◆ 一般形式 ◆ 实际操作 ◆ 总结 四.红黑树 ◆ 概念 ◆ 示例 ◆ 对比 五.总结 前面我们介绍了二叉树、二叉搜索树、多叉树等基础的树形结构,

    2024年01月19日
    浏览(42)
  • 【数据结构】二叉树---红黑树的实现

    目录 一.  红黑树的概念及性质 二.  红黑树结点结构的定义 三.  红黑树的插入操作      1. 情况一      2. 情况二        3. 情况三 四.  红黑树的验证 五.  红黑树与AVL树的比较 红黑树是一种自平衡的二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,

    2024年03月21日
    浏览(42)
  • Java 数据结构篇-实现红黑树的核心方法

      🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍      文章目录         1.0 红黑树的说明         2.0 红黑树的特性         3.0 红黑树的成员变量及其构造方法         4.0 实现红黑树的核心方法         4.1 红黑树内部类的核心方法         (1)判

    2024年01月24日
    浏览(43)
  • 【数据结构】红黑树的删除(抽丝剥茧,带你理清每一种情况)

     红黑树的删除,较AVL树的删除比较抽象,同时也跟红黑树的插入的区别较大,但大体上的思路还是基于普通二叉搜索树的基础上进行讨论的。 浅浅的铺垫一下: 需要清楚普通二叉树的删除,可见AVL树的删除文章开头。 四种旋转的操作(只需操作)得熟记于心,可见AVL树的插

    2024年04月27日
    浏览(32)
  • 数据结构——常见二叉树的分类(完全二叉树、满二叉树、平衡二叉树、二叉搜索树、红黑树)

    专业术语 中文 描述 Root 根节点 一棵树的顶点 Child 孩子结点 一个结点含有的子树的根节点称为该结点的子节点 Leaf 叶子结点 没有孩子的节点 Degree 度 一个节点包含子树的数量 Edge 边 一个节点与另外一个节点的连接 Depth 深度 根节点到这个节点经过边的数量 Height 节点高度 从

    2024年02月03日
    浏览(42)
  • 【C++】AVL树和红黑树的插入

    时间过的好快,我也修炼到红黑树了 人世这一遭,何其短暂而漫长啊…… 1. 虽然二叉搜索树的搜索效率很高,当搜索树接近满二叉树时,搜索效率可以达到logN,但是如果数据是有序的,则二叉搜索树会退化为单支树,搜索效率和普通的序列式容器相同了就,所以在搜索树的

    2023年04月08日
    浏览(43)
  • 红黑树数据结构

    现在JAVASE中HashMap中底层源码是由数组+链表+红黑树进行设计的,然后很多地方也是用到红黑树,这里单独对红黑树数据结构进行简单的介绍。 目录 红黑树概念 红黑树的性质 自平衡规则 代码   红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可

    2024年02月01日
    浏览(38)
  • 【数据结构-树】红黑树

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月07日
    浏览(42)
  • 数据结构 | 红黑树

    节点的左边比节点的值小,右边比节点的值大。 节点要么是 红色 ,要么是 黑色 根节点 是黑色 叶子节点都是黑色的空节点 红黑树中红色节点的子节点都是黑色 从任一节点到叶子节点的所有路径都包含相同数目的黑色节点 在添加或者删除节点的时候,如果不满足这些性质会

    2024年01月21日
    浏览(41)
  • 数据结构——红黑树

    目录 概念 性质 结点的定义  插入 调整 当p是g的左孩子时 当p为g的右孩子时 插入完整代码 红黑树的检测 红黑树完整代码(包括测试数据)   红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是RED或BLACK。 通过对任何一条从根到叶子的路径

    2023年04月09日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包