看完本篇文章希望你能解决以下问题,文章稍长,希望你耐心看完!

  • 红黑树也有自旋操作,为什么会比AVL要性能好呢(或者说稳定呢)?
  • 红黑树的平衡调整策略?
  • 看完能不能手撕红黑树?

1.先来复习复习AVL树

平衡二叉树有很多,最先被发明的平衡二叉树是AVL,是一种高度平衡的二叉查找树;为什么会引入AVL呢?它有什么特别之处呢?

普通的二叉搜索树的时间复杂度在O(logn) ~ O(n),在频繁进行插入、删除可能会出现复杂度退化的情形;也就是在极端情况下,二叉树搜索树退化成了链表

普通的二叉搜索的两种极端情况如下图:


如果是你,你认为应该怎么解决如上问题呢?
其实最核心的一点就是“平衡”,也就是希望节点两边尽可能地保持一致,这样就能保证我们地时间复杂度处于O(logn),因此AVL树帮我们解决了这一个问题。

在AVL树中,任意一个节点的左右子树的高度差的绝对值不会大于1,这是AVL树达到平衡核心性质;虽然AVL树解决了一边倒的情形,但是AVL平衡调整时的左旋和右旋也消耗了一定的性能,所以AVL树应用也不是很广泛。

  • 有关AVL树我就不再过多叙述,本章的重点是红黑树。

2.探讨红黑树的魅力

在源码学习过程中,更是到处都是红黑树的影子!!!

红黑树相对于普通的二叉搜索树稍微难了点,那它难在哪呢?主要是在插入和删除时可能会破坏树的平衡性,所以需要进行自适应调整重新达到平衡状态。其实耐下心来看完,发现红黑树也就是那么回事。红黑树是必须要掌握的点,往远了说红黑树使用非常广泛,往近了说很多map类的源码中都用到了红黑树。

先来看红黑树的性质(本质上和2-3树具有等价性想了解的同学可以取看看,对了解B树也有帮助)。

  • 1.根节点必须是黑色
  • 2.节点非黑即红
  • 3.叶子节点是黑色(这个是虚拟节点nil,实际上不存在,就是那个最后一个节点的left和right指向的空)
  • 4.两个红色节点不能相连
  • 5.根节点到叶子节点,黑色节点数目相同

通过以上的性质你能看出来什么特点没?

  • (1)注定了红黑树中最长路径是最短路径的两倍

  • (2)红黑树通过树高来控制平衡,也就是(1)所讲的

回到刚开始开头问的问题,为什么红黑树要比AVL更加广泛具有代表性?

红黑树比AVL树的平衡控制条件更加松散;AVL要求左右树差的绝对值必须小于1,这就导致了AVL树在插入和删除之后发生调整的概率要比红黑树要大,而自旋操作又是比较浪费性能的,所以也就导致了控制条件较为松散的红黑树比较吃香。

有的人会问了那控制条件能不能更松散些呢?

需要考虑查询效率和消耗的性能,再松散直接使用链表得嘞。

飞速手撕红黑树中…

面试让你手撕红黑树?30张图带你彻底理解红黑树~相关推荐

  1. 红黑树分为红和黑有什么好处_30 张图带你彻底理解红黑树

    点击上方"程序员大白",选择"星标"公众号 重磅干货,第一时间送达 来源:编程那些事等等 本文将通过图文的方式讲解红黑树的知识点,并且不会涉及到任何代码,相信我 ...

  2. 面试官:手撕十大排序算法,你会几种?

    作者: C you again,从事软件开发 努力在IT搬砖路上的技术小白 公众号: [C you again],分享计算机类毕业设计源码.IT技术文章.游戏源码.网页模板.程序人生等等.公众号回复 ...

  3. 红黑树的删除_从红黑树的本质出发,彻底理解红黑树!

    前言 早上好,我是彤哥. 上一节,我们一起从二叉树.二叉查找树.平衡树.AVL树.2-3树.2-3-4树.B树,一路讲到红黑树,最后得出红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3 ...

  4. 转载 硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?

    硬核图解!30张图带你搞懂!路由器,集线器,交换机,网桥,光猫有啥区别?... 煎鱼(EDDYCJY) 于 2022-01-17 08:51:00 发布 1219 已收藏 22 文章标签: 交换机 网 ...

  5. 旧金山大学网站的红黑树演示动画,益于理解红黑树

    旧金山大学网站的红黑树演示动画. 有插入.删除.查询.打印的过程演示动画. 对于理解红黑树十分有益处. 网址: https://www.cs.usfca.edu/~galles/visualizati ...

  6. 从红黑树的本质出发,彻底理解红黑树!

    前言 早上好,我是彤哥. 上一节,我们一起从二叉树.二叉查找树.平衡树.AVL树.2-3树.2-3-4树.B树,一路讲到红黑树,最后得出红黑树的本质:红黑树就是2-3-4树,请看下图: 我们知道2-3 ...

  7. 实现时间排序_面试官:手撕十大排序算法,你会几种?

    推荐阅读: 去面试大厂被 Kafka 虐了,后悔没有早点看到这份Kafka手写笔记 面试阿里,京东,百度,快手归来,三年Java开发总结了这些经验 阿里,字节,腾讯,面试题都涵盖了,这一份Java面试 ...

  8. 30 张图带你了解 CPU 制作全过程

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! CPU 是现代计算机的核心部件,又称为"微处理器".对于 PC 而言,CPU 的规格与频率常常 ...

  9. 30 张图带你揭秘 CPU 是如何制造出来的!

    CPU是现代计算机的核心部件,又称为"微处理器".对于PC而言,CPU的规格与频率常常被用来作为衡量一台电脑性能强弱重要指标.Intelx86架构已经经历了二十多个年头,而x86架 ...

最新文章

  1. Go 学习笔记(67)— Go 并发安全字典 sync.Map
  2. mysql sum计算效率很慢_MySQL--RDS下的分区表实践(文末附MySQL视频教程与面试题)...
  3. 13、 LEFT/RIGHT JOIN:外连接(左连接,右连接)
  4. Github大热论文 | U-GAT-IT:基于GAN的新型无监督图像转换
  5. Leetcode题库191.位1的个数(C实现)
  6. 去掉 edittext 长按全选_开封消毒湿巾全选
  7. php概率计算_替你总结一份MIT计算机课程
  8. Kotlin 知识梳理(9) 委托属性
  9. Windows Server 2008远程桌面多用户登陆的配置方法
  10. 2017 Multi-University Training Contest - Team 5:1001. Rikka with Candies(手写bitset)
  11. Nexus-NuGet私有仓库服务搭建(一)
  12. web前端性能优化的技巧
  13. Java入门到精通——工具篇之Maven概述
  14. 如何使用c语言制作微信小程序,不懂代码如何制作微信小程序?微信小程序的步骤?...
  15. 狂团KtAdmin框架正式免费开源发布,助力独立版SAAS系统快速开发!
  16. 数据库服务器硬件运行环境,数据库及WEB服务器环境部署硬件配置模板
  17. php 计费系统设计,仓储系统之计费模块设计
  18. Dlib模型之驾驶员疲劳检测总结(可视化界面)
  19. 手机NFC如何格式化加密IC卡
  20. adb发送什么命令能在手机屏幕弹窗显示_Android 手机投屏在 Ubuntu 上的方法

热门文章

  1. Get SQL String From Query Object In Entity Framework
  2. 数据库查找出list数据,进行处理
  3. 华为正式宣布鸿蒙,空欢喜一场?华为正式宣布,鸿蒙系统用作他用
  4. 在线考试计算机文化基础,计算机文化基础在线考试.pdf
  5. html 自定义标签解析,Java解析Html自定义标签的属性
  6. android头部固定悬停,Android开发上滑悬停且头部可刷新
  7. java中1代表什么,java中iamp; =(i-1)的含义是什么
  8. 家用电脑虚拟机做服务器_家用电脑能当服务器吗
  9. border和图片之间有缝隙_院子里现浇水泥板,每块之间留7公分的缝,铺出来的效果漂亮大气...
  10. linux dd命令制作软盘,制作Linux启动软盘的四种方法