关于二叉树、二叉查找树、平衡二叉树、红黑树、B树、B+树的区别和特性


一、二叉树

二叉树不多说,简而言之就是每个结点最多两个结点的树结构,分为左右子树


二、满二叉树、完全二叉树

1、满二叉树:必须每一个层的结点数都达到最大值,你要么是叶子结点、要么有两个结点

即深度为k且有2^k-1个结点

在这里插入图片描述

2、完全二叉树:则是除了最后一层缺失外,其他层结点数都需要保证最大值,最后一层结点要么是满的,要么缺失右边结点,意味着叶子结点从左至右排序,中间不能有空缺
在这里插入图片描述

  • 如上,主要是扩展了解一下

三、二叉查找树(BST)

1、二叉查找树的特征

  1. 二叉查找树也叫二叉搜索树、二叉排序树
  2. 二叉查找树最主要的特征:左结点小于父结点,右结点大于父结点
  3. 此树型结构可以快速定位数据位置,不要全部遍历,大大提高了数据的检索速度
  4. 时间复杂度最好情况是O(logn) ,最坏情况下时间复杂度O(n)

特征:
1、左结点小于父结点,右结点大于父结点
2、左右子树也分别是二叉查找树

在这里插入图片描述

  • 因为二叉查找树结构特殊性,它的中序遍历即是有序数据

2、二叉查找树的不足

假设插入的数据是如下这种情况,二叉查找树的左右高度差就会很悬殊,树结构退化成了链表
在这里插入图片描述
如上图,我们可以看出如果我们查询的数据恰好处于最下层,那时间复杂度就会变成最坏情况 O(n)。
所以为了改进二叉查找树的缺陷问题,设计了平衡二叉查找树AVL

四、平衡二叉树(AVL)

1、平衡二叉树特征

1、平衡二叉树又叫平衡二叉查找树,属于二叉查找树的扩展改进
2、平衡二叉树定义中有个平衡因子,表示节点的左右子树深度之差,即任意左右子树高度差不高于1
3、在这样严格的定义下,平衡二叉树就不会出现二叉查找树那种最坏情况,可以减少树的高度,加快检索

特征:任意左右子树高度差不高于1

在这里插入图片描述

2、平衡二叉树的不足

先说结果:平衡二叉树检索速度快,但是不适合删除和插入。

1、我们得知平衡二叉树是在二叉查找树定义上扩展的,可以减少检索次数,加快检索速度。
2、但平衡二叉树在删除和插入时,因为需要保持平衡,会通过旋转操作来保证平衡因子不超过1
3、因为旋转操作会耗费大量时间,得不偿失,所以不适合插入和删除
在这里插入图片描述

  • 这里不多解释旋转操作,需要了解的自行爬网

五、红黑树

1、如上平衡二叉树不适合插入和删除,自然便有了另一种结构,,这便是红黑树(R-B Tree)
2、红黑树是一种弱平衡二叉查找树,红黑树的每个节点上都有存储位表示结点的颜色,可以是红或黑
3、红黑树的内部定义改变颜色和旋转规则,冲突时,可以直接修改颜色或者旋转位置,使其旋转次数远小于平衡二叉树,所以适合插入和删除的情况,但检索略逊于平衡二叉树

特征:

  1. 根结点必须是黑色
  2. null的结点(即null叶结点)必须是黑色
  3. 一个结点是红色,其子结点必须是黑色(红色结点不能相连)
  4. 任意一个结点到叶子结点路径都包含相同数目的黑色结点
  • 注意:我们知道黑红树是一种弱平衡,对比平衡二叉树,它没有定义平衡因子,所以为了确保不退化成为链表形式,上面的第三、四特征保证了任意结点到其每个叶子结点的最长路径不会超过最短路径的2倍

在这里插入图片描述

注意:如果实在不理解,可以点击如下网址,自己去手动感受一下(看不懂,中文翻译即可)
数据结构可视化


六、B树

对比红黑树,我们发现数据不是很多的时候,它的查询效率是不错的,但是当数据有数亿量级时,显然红黑树它的深度也会变得很高,磁盘和内存交换 I/O次数就会变高,所以基于大数据量的需求,B树就体现了极大的用处。减少I/O访问次数

1、B树是一种自平衡多路查找树,不再是二叉的,而是多叉的,B树也可以写成B-树,但是它叫B树,不是叫B减树
2、我们需要知道它的数据存在每一个结点的关键字中
3、假如我们现在有个M叉B树,特征如下:

特征
1、所有非叶子结点最多M个儿子(M>2),即至多有M-1个关键字
2、除根结点以外的非叶子结点的儿子数为至少为M/2
3、任何一个关键字只出现在一个结点中
4、所有叶子节点都在同一层
5、自动层次的控制(B树的分裂机制,让B树在删除插入时,不会退化成线性结构)

在这里插入图片描述


七、B+树

1、B+树,可以说是B树的加强版本
2、B+树和B树不同的是,有如下几点:

  • 非叶子结点都存储索引、所有关键字都在叶子结点出现,即叶子节点存储数据(这意味着B+树深度更低,可指向更多的数据,加快检索)
  • 所有叶子结点有一个链指针,叶子结点中数据用链表把数据有序的链接在一起(更适合范围检索)
  • 每个非叶子节点地址指针和关键字同样数量
  • 非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树

在这里插入图片描述

注:B+ 树是插入自底向上


八、面试题

1、数据库索引为什么使用B+树,而不是其他树?

  • 1、B+树的磁盘读写代价低、访问速度更快:因为B+树非叶子节点存储的都是索引,在相同的空间下,B+树存储的索引更多,指向的数据也会更多,而一次读取的数据也会更多,而深度也会随之降低,访问速度也会提高。
  • 2、B+树的检索效率更加稳定:因为B+树的叶子结点在同一层,即数据在同一层,而访问顺序是从根节点访问至叶子结点,高度一致,所以B+树的访问效率更加稳定
  • 3、B+树的叶子结点数据使用链表链接,更加支持随机检索、顺序检索、范围检索

2、B树和B+树的区别?

  • 1、B+非叶子结点都存储索引、叶子结点存储数据,而B树是数据和地址指针同时存在非叶子结点
  • 2、B+所有叶子结点有一个链指针,叶子结点中数据用链表把数据有序的链接在一起,所以它支持范围检索
  • 3、B树任何一个关键字只会在一个结点中,不会重复,而B+树索引会最后都会呈现到叶子结点
  • 4、最后根据情况,说说B+树的优点:如I/O次数少,检索效率稳定等,说说为什么即可。

3、HashMap为什么使用红黑树而不是用其它树?

  • 1、红黑树的优点:对于轻量数据,性能高,在检索、删除和插入操作中对比其他结构,都能保证整体的性能良好
  • 2、二叉搜索树AVL在一定的情况下,会退化为线性结构或是深度差过于悬殊,严重影响检索效率,能达到最坏情况O(n)
  • 3、而二叉平衡树虽然在AVl基础上维持了平衡,保证了检索速度,但是在插入删除炒作中,会耗费极大的时间资源,得不偿失
  • 4、相反,红黑树基于颜色改变和旋转策略,保证了旋转次数,最多三次即可平衡,大大提高了效率

总结

我这是为了面试复习了一下,很多没有讲详细,但是基本的思路差不多都有,不懂的,大家看看别的博主
记住原理,背一下,练一下口舌,冲!!!

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值