本文作者:帅地

公众号:苦逼的码农

红黑树算是很难的一种数据结构吧,一般很少考察插入删除等具体操作步骤,如果遇到要你手写红黑树的面试官,就直接告辞吧。所以,更多是会考察你对红黑树的理解程度,考察的最多的估计就是为什么有了二查找查找树/平衡树还需要红黑树这个问题了,今天,你只需要花一分钟的时间,就知道怎么回答这个问题了。

1、二叉查找树的缺点

二叉查找树,相信大家都接触过,二叉查找树的特点就是左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大,如图


二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logn)。

之所以说是正常情况下,是因为二叉查找树有可能出现一种极端的情况,例如


二叉查找树的条件,然而,此时的二叉查找树已经近似退化为一条链表,这样的二叉查找树的查找时间复杂度顿时变成了 O(n),可想而知,我们必须不能让这种情况发生,为了解决这个问题,于是我们引申出了平衡二叉树

2、平衡二叉树

平衡二叉树就是为了解决二叉查找树退化成一颗链表而诞生了,平衡树具有如下特点

1、具有二叉查找树的全部特性。

2、每个节点的左子树和右子树的高度差至多等于1。

例如:图一就是一颗平衡树了,而图二则不是(节点右边标的是这个节点的高度)



平衡树基于这种特点就可以保证不会出现大量节点偏向于一边的情况了。关于平衡树如何构建、插入、删除、左旋、右旋等操作这里不在说明,具体可以看我之前写的一篇文章:【漫画】以后在有面试官问你AVL树,你就把这篇文章扔给他。

于是,通过平衡树,我们解决了二叉查找树的缺点。对于有 n 个节点的平衡树,最坏的查找时间复杂度也为 O(logn)。

3、为什么有了平衡树还需要红黑树?

虽然平衡树解决了二叉查找树退化为近似链表的缺点,能够把查找时间控制在 O(logn),不过却不是最佳的,因为平衡树要求每个节点的左子树和右子树的高度差至多等于1,这个要求实在是太严了,导致每次进行插入/删除节点的时候,几乎都会破坏平衡树的第二个规则,进而我们都需要通过左旋右旋来进行调整,使之再次成为一颗符合要求的平衡树。

显然,如果在那种插入、删除很频繁的场景中,平衡树需要频繁着进行调整,这会使平衡树的性能大打折扣,为了解决这个问题,于是有了红黑树,红黑树具有如下特点:

1、具有二叉查找树的特点。

2、根节点是黑色的;

3、每个叶子节点都是黑色的空节点(NIL),也就是说,叶子节点不存数据。

4、任何相邻的节点都不能同时为红色,也就是说,红色节点是被黑色节点隔开的。

5、每个节点,从该节点到达其可达的叶子节点是所有路径,都包含相同数目的黑色节点。

例如下面的图片(注意,图片中黑色的、空的叶子节点没有画出)(图片来自极客时间)


正是由于红黑树的这种特点,使得它能够在最坏情况下,也能在 O(logn) 的时间复杂度查找到某个节点。至于为什么就能够保证时间复杂度为 O(logn),我这里就不细讲了,后面的文章可能会讲。

不过,与平衡树不同的是,红黑树在插入、删除等操作,不会像平衡树那样,频繁着破坏红黑树的规则,所以不需要频繁着调整,这也是我们为什么大多数情况下使用红黑树的原因。

不过,如果你要说,单单在查找方面的效率的话,平衡树比红黑树快。

所以,我们也可以说,红黑树是一种不大严格的平衡树。也可以说是一个折中发方案。

如果我上面讲的,你都懂,都能够在面试中说出来,应该是足够的了。我当时就是这么回答的。

4、总结

所以,最后的答案是,平衡树是为了解决二叉查找树退化为链表的情况,而红黑树是为了解决平衡树在插入、删除等操作需要频繁调整的情况。

不过,红黑树还有挺多其他的知识点可以考,例如红黑树有哪些应用场景?向集合容器中 HashMap,TreeMap 等,内部结构就用到了红黑树了。还有构建一棵节点个数为 n 的红黑树,时间复杂度是多少?红黑树与哈希表在不同应该场景的选择?红黑树有哪些性质?红黑树各种操作的时间复杂度是多少?

如果你把这些都弄懂了,应该就差不多可以的了,后面有时间的话,我给大家详细讲一下这些题,这里最好是要求理解,而不是死记硬背。

●无处不在的「单例设计模式」

●我们都知道的「字典」,到底可以用来做什么?

●曾经,我被这些陷阱坑的找不着北...

●直到面试被问到什么是「共享引用」,我才发现对于它的一无所知...

?扫描上方二维码即可关注

腾讯面试题:有了二叉查找树、平衡树为啥还需要红黑树?相关推荐

  1. 有了二叉查找树、平衡树为啥还需要红黑树?

    参考文章: 有了二叉查找树.平衡树为啥还需要红黑树? 漫画AVL树 谢谢作者分享!

  2. 拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?

    之所以选择红黑树是为了解决二叉查找树的缺陷,二叉查找树在特殊情况下会变成一条线性结构(这就跟原来使用链表结构一样了,造成很深的问题),遍历查找会非常慢. 而红黑树在插入新数据后可能需要通过左旋,右旋. ...

  3. 浅谈二叉查找树、AVL树、红黑树、B树、B+树的原理及应用

    一.二叉查找树 1.简介 二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质: 任意节点左子树不为空,则左子树的值均小于根节点的值. 任意节点右子树不为空,则右子树的值 ...

  4. 红黑树:自平衡的二叉查找树

    前一篇博文中写道,二叉查找树是一种具有较高性能的符号表实现,在理想情况下它可以保证查找.插入和删除操作的时间复杂度在对数级别.二叉查找树可以动态地插入和删除元素,在插入和删除操作的过程中,二叉查找树的 ...

  5. 二叉查找树与红黑树原理和程序全面介绍

    转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8273542 学习方法:我主要是参考算法导论以及Nginx中rbtree.h和rbtr ...

  6. 最新腾讯面试题汇总--C++后端开发岗(部分含答案)

    阻塞.非阻塞.同步.异步 的区别 阻塞 阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu 不会给线程分配时间片,即线程暂停运行).函数只有在得到结果之后才会返 ...

  7. android获取指针空间大小_腾讯笔试题:浅谈计算机中cpu位数和指针

    来一个腾讯笔试题 在刷题的时候看到了腾讯笔试题的这个问题 long a = (long)(((int *) 0) + 4);printf("%ld ",a); 请问输出 a 的值是 ...

  8. 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了)

    title: 腾讯面试题:char 和 varchar的最大长度是多少,以及他们之间的区别(看完你就能和面试官笑谈人生了) tags: 面试常见题 腾讯面试题:char 和 varchar的最大长度是 ...

  9. 腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了)

    title: 腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了) tags: 面试常见题 腾讯面试题:创建索引时,你会怎么考虑呢?(看完你就能和面试官谈人生了) 腾讯面试题:创建索 ...

最新文章

  1. ML之LoRBaggingRF:依次利用Bagging、RF算法对泰坦尼克号数据集 (Kaggle经典案例)获救人员进行二分类预测——模型融合
  2. 前端趋势榜:上周最热门的 10 大前端项目 - 210327
  3. github git.exe位置
  4. 010 、JVM实战总结: 动手实验:亲自感受一下线上系统部署时如何设置JVM内存大小
  5. [USACO13JAN]Square Overlap【模拟】
  6. 鸿蒙 HarmonyOS 3.0,终于来了!
  7. const 成员函数
  8. 关于java的外语文献_java英文参考文献(涵盖3年最新120个)
  9. 基于Java的连连看游戏设计与实现(含源文件)
  10. 如何使用电脑注册微博登陆模拟器
  11. 推荐系统实践(三)ICF和UCF
  12. WorldFirst如何注册?WorldFirst收款账号注册流程!
  13. echart水滴_用echarts实现水滴图效果
  14. SEBASTIEN KWOK 2022春夏系列发布
  15. python设置tk退出_Python3 tkinter基础 Tk quit 点击按钮退出窗体
  16. javaScript的console
  17. 输入一个有大写和小写的字符串,把其中的大写转化为小写,小写转化为大写。
  18. Python基础教程(第3版)读书笔记:第2章 列表和元组
  19. 练习题记录:求解距离矩阵,首先生成一百个二维坐标点,计算任意两个坐标点的距离
  20. 终极音频增强软件 SRS Audio Sandbox 特别版

热门文章

  1. unicode 解码
  2. 深入浅出Zabbix 3.0 -- 第十五章 Zabbix 协议与API
  3. 防止XSS跨站脚本攻击:Java过滤器
  4. 撰写毕业论文中word公式编辑器的学习使用(一)——录制宏
  5. 华为 2022_09_07 笔试题复盘
  6. 主题:基于主从博弈理论的共享储能与综合能源微网优化运行研究
  7. 三维重建(二):包裹相位以及绝对相位求解
  8. 什么是ACPI,什么是APIC
  9. 湖南省教育考试院2021高考成绩查询,2021年湖南高考成绩查询时间 高考成绩查询入口...
  10. DataQL之语法-词法记号