面试官:了解二叉树吗,平衡二叉树,红黑树腾讯云开发者社区

在 jdk1.8 之前,HashMap 的数据结构由「数组+链表」组成,数组是 HashMap 的主体,链表是为了解决 Hash 冲突引入的,正常的数据存放是直接存在数组中,但如果发生 Hash 冲突就会以链表的形式进行存储,而在 jdk1.8之后,当链表的长度超过 8 之后,将会转换成红黑树经常存储...

相信这一段 HashMap 的描述,一定是大家所熟知的,其实细品之后,我们可以从这段描述中发掘这些信息。

数组 > 链表 > 树。

正所谓有需求就会有发展,我们来看看为什么在有「数组+链表」的情况下,还出来个树结构。

从数组到链表的优缺点,我们可以看出是各有千秋,不能很准确的说链表比数组就一定要高效,而正是因为这种关系的存在,所以二叉树出现了。

所以二叉树的由来:二叉树整合了数组和链表的优缺点,使得插入、删除、查找的速度都很快,效率比较高。

二叉树是树形结构的一个重要类型,也是众多数据结构的基石。

树有很多类型,每个节点最多只能有两个子节点的叫二叉树。

所以,二叉树的特性就是每个节点的子结点不允许超过两个。

二叉查找树是一种特殊的二叉树,二叉查找树的特点就是,左子树节点比父节点小,右子树节点值比父节点大。

二叉查找树有一种极端的存在,二叉树的大部分子节点都比父节点值小,然后导致所有的数据偏向左侧,进而退化成链表,如下图所示:

我们使用二叉树的目的是因为其效率高于链表查询,但这种退化为链表的现象很显然就突兀,怎么办呢。

所以为了解决二叉树退化成一棵链表就引入了平衡二叉树。

平衡二叉树,又被称为AVL树,是为了解决二叉树退化成一棵链表而诞生的。

平衡二叉树特点:

其中左右子树的高度差是通过左旋右旋实现的。

下面是一个平衡二叉树和非平衡二叉树的图:

到底是如何判断高度差的呢?我们可以来数节点最长连接数,比如左侧节点最长连接数为「3 > 4 > 5」3个节点,右侧为「9」一个节点,所以高度差为2。

再比如下面一个平衡二叉树:

左侧最长连接点为「3(9) > 7 >11」,即高度为2,右侧最长连接点为「14(16) > 15 > 18 > 11」,即高度为4,所以高度差为2。

为了维持二叉树的平衡,平衡二叉树是通过左旋、右旋来保证的,从大的方向旋转过程又被分为单旋转和双旋转,总之,旋转的作用就是避免出现节点偏向一边的情况,具体左旋、右旋操作在这就不详细阐述了。

对于那种频繁删除、插入的场景,平衡二叉树的调整过程显然是存在性能问题的,所以为了解决这个问题,进而又引入了红黑树。

红黑树的特点:

红黑树如下图所示:

概括为:红黑树所有的根节点都是黑色的的空节点,也就是根节点不存数据;任何相邻的节点都不能同时为红色,红色节点是被黑色节点隔开的,每个节点,从该节点到达其可达的叶子节点是所有路径,都包含相同数目的黑色节点。

正是因为这种特点,红黑树不同于平衡树的操作,红黑树不会因为插入、删除等操作追求绝对的平衡,它的旋转次数少,插入最多两次旋转,删除最多三次旋转,所以对于搜索、插入、删除操作较多的情况下,红黑树的效率是优于平衡二叉树的。

但是需要注意的是,如果应用场景中对插入、删除不频繁,只是对查找要求较高,那么平衡二叉树还是较优于红黑树。

为什么有了数组和链表还要引入二叉树?

针对数组和链表的优缺点,无法说链表一定优于数组,或者是数组一定优于链表,因为某些长期的需要,所以就推出一个相对折中的二叉树。

为什么有了二叉树还要引入平衡二叉树?

有了二叉树还不算完,二叉树有一种极端的情况,就是所有的子结点偏向一端,二叉树退化成链表,这就相当于我选择了这种的二叉树,你现在罢工不干了,找了个链表来糊弄我...

所以为了解决二叉查找树退化为链表的情况,引入了平衡二叉树,即:

平衡二叉树是为了解决二叉树退化成一棵链表而诞生的。

既然有了平衡二叉树,这下总没有问题了吧?

为什么有了平衡二叉树还要引入红黑树?

但是是实际使用过程中,因为平衡二叉树追求绝对严格的平衡关系,显然这个规则在于频繁的插入、删除等操作的情景性能肯定会出现问题...

所以为了解决这个问题,进而又引入了红黑树。

平衡二叉树追求绝对严格的平衡,平衡条件必须满足左右子树高度差不超过1,红黑树是放弃追求完全平衡,它的旋转次数少,插入最多两次旋转,删除最多三次旋转,所以对于搜索、插入、删除操作较多的情况下,红黑树的效率是优于平衡二叉树的。

红黑树是终结吗?

时代总是进步的,大胆猜测不会是,就跟当初从数组、链表到二叉树一样。

至此,通过这篇希望大家对整个树结构的出现有一个基础的概念,目前面试中最为常问的就是红黑树了,当然这得益于 HashMap,但红黑树还有挺多其他的知识点可以考察,例如红黑树有哪些应用场景?红黑树与哈希表在不同应该场景的选择?红黑树有哪些性质?红黑树各种操作(插入删除查询)的时间复杂度是多少?等等等等...

THE END
0.平衡是什么意思|平衡的解释是什么什么是平衡引证解释: ⒈ 谓衡器两端承受的重量相等。 引《汉书·律历志上》:“準正,则平衡而钧权矣。”唐韩偓《漫作》诗之二:“千钧将一羽,轻重在平衡。”明马愈《马氏日抄·水火称毒》:“称则以人、石平衡,视其轻重,虚则人低石举,实则石重人轻。” ⒉ 谓两物齐平如衡。 引《礼记·曲礼下》:“执jvzquC41o0nbqA;0eqs0er~waukbtlm1'G;&DB*D5'K9'J6'C3
1.什么是化学平衡状态化学反应讲究化学平衡状态,是高中的重点知识,那么你了解什么是化学平衡状态嘛?。今天小编在这给大家整理了什么是化学平衡状态相关资料,接下来随着小编一起来看看吧! ▼▼目录▼▼ 化学平衡状态 判断化学平衡状态的标志口诀 判断化学平衡状态例子 化学平衡状态 jvzquC41yy}/z~jzkng/exr1zwkykok1icuzkqzczwk0e==:576/j}rn
2.什么是生态平衡?什么是生态平衡? 一、生态平衡的现象 在生态系统中,生物有生有死,有迁入也有迁出,因此,各种生物的数量、比例不断地发生着变化。当生态系统发展到一定阶段,各种生物之间通过相互的种种作用,在各自的数量和比例上达到一个相对稳定的平衡状态时,就叫做生态平衡。 jvzquC41yy}/fr~khctxgw3eqo5kkjtcp1hbprfplkvynslkcubp86567792A9;63=:5;3jvo
3.什么是画面平衡?|油画基础知识什么是画面平衡?| 油画基础知识 在一幅油画作品中,作品的布局平衡如排兵布阵,必须讲求整体大局观念,统一把握油画作品的整体布局。 油画作品的布局能否平衡,是整个油画绘画体系的关键所在,是整个油画作画过程的首要前提和基础。 德加的一张作品,画家采用竖式布局,把焦点的人物推到画面的右上方位置上,从平面角度分析,jvzquC41crvbv}3u|pkxu7hqo1p{Cyu1hkrfu8x|zy5Og€x14282394491<42:950jznn
4.数据结构本文详细介绍了平衡二叉树和哈夫曼树的概念、原理及其应用场景。平衡二叉树能够确保二叉搜索树在插入或删除节点后的高效性能;哈夫曼树则是用于数据压缩的一种特殊二叉树,能够实现高效的编码和解码。 一、平衡二叉树 1.1 什么是平衡二叉树? 规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度之差的绝对值jvzquC41dnuh0lxfp0tfv8}v3;?83:4ctvodnn4fgvgjn|4334=69B:2
5.在夫妻关系中,平衡指的是什么?如何达到平衡?在夫妻关系中,平衡指的是什么?如何达到平衡? 通常我们讲的平衡主要是指施与受的平衡,一段关系里,双方的付出和收获都要基本上达到一个相对平衡的状态。这样的话,一段关系就会顺畅而又流动的往前继续延伸。比如说,对方给你50%的好,那你增加一点,55%。他再60%,你在65%,他在70%……这是一个非常和谐而充满爱意jvzquC41o0iiww~w{kyigwl0eqs0oru1vqvje86995:21
6.专业设备的最爱平衡接口特点原理简介耳机新闻什么是平衡接口 简单的来说,平衡接口一般最常见的是XLR(一般采用三芯卡农插头)和TRS(采用6.22MM接口)两种,而相比传统的非平衡接口比如RCA莲花来说,最大的差别在于平衡接口每个声道有三条线传输,而非平衡只有两条线。 常见平衡信号接法 但需要注意的是,平衡接口可用来连接平衡的信号,也可用来连接非平衡的信号,而非jvzquC41jggerqtpg0€pn7hqo0io1<;;15<:3<;;0jznn
7.美元、美债、美股三者有什么样的平衡关系?一、美元、美债、美股当当前市场出现的格局是强美元、较高的美债收益率(10年期美债再次接近3%的心理预期)、以及不断接近或创出新高的美股(主要以科技股领涨,苹果市值破万亿美元,纳斯达克创新高)。 可从理论上看这个三角平衡是一定会打破的,强美元是由于美联储的加息缩表预期,以及美国强劲经济与他国不确定性的鲜明反差对比。假设美元持续当jvzquC41zwkrk~3eqo599:9595:8:8633:<36<6
8.解析:奥斯卡短片《平衡》(平衡)影评最终,人类必将生活在地狱般的二维世界……所谓二维世界什么样子,就像片尾。非黑即白,是与非对与错,要么对要么错,没有其他人站在自己的位置发表自己的观点和态度,这其实就打乱了一个多维空间下的平衡……女:哦明白了,当最终出现了绝对的二维的平衡,人类社会也就和地狱没什么两样了……是啊,你看片中那三个人,jvzquC41oq|jg7iqwdgo0lto1tkwkn|1;7<62>=1
9.四轮定位不要轻易做,别被修理工忽悠了!新浪汽车动平衡与四轮定位都是保证车辆安全性、稳定性及车辆耐用性的重要因素,但本质上是有区别的。 什么是动平衡? 动平衡是通过矫正车轮(轮胎+轮毂)的配重平衡,从而使车辆轮胎一直处于同心运动。 什么时候做动平衡? 一般情况下,只要更换或维修过轮胎系统(轮胎或轮毂)后,都要做动平衡,而且有的个别车辆,因为使用时间过长,jvzquC41cwzp0|npc0ipo7hp1uksxrhg1{532:;/243148igvcom/rkzp|goj9:;;7940|mvon