150道MySQL高频面试题,学完吊打面试官--平衡二叉树,红黑树,B树和B+树

前言

本专栏为150道MySQL大厂高频面试题讲解分析,这些面试题都是通过MySQL8.0官方文档和阿里巴巴官方手册还有一些大厂面试官提供的资料。
MySQL应用广泛,在多个开发语言中都处于重要地位,所以最好都要掌握MySQL的精华面试题,这也是面试官最喜欢问的,现在面试官在面试的时候更关心的是某个技术点的深度,所以专栏的内容也会从底层开始讲解,本专栏会一直不断的进行更新,欢迎大家一起交流学习。
gongzhonghao【小白的大数据之旅】

平衡二叉树,红黑树,B树和B+树的区别和应用场景

平衡二叉树(AVL)

AVL树全称G.M. Adelson-Velsky和E.M. Landis,这是两个人的人名。

平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。

特性

  • 基础数据结构
  • 左右平衡
  • 高度差大于1会自旋
  • 每个节点记录一个数据
  • 任意节点的左子树和右子树的高度最多相差1,即平衡因子(左子树高度减右子树高度)的绝对值最多为1。

特点

具有以下特点:

  • 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1
  • 并且左右两个子树都是一棵平衡二叉树。

在这里插入图片描述AVL的生成演示

AVL的问题

众所周知,IO操作的效率很低,在大量数据存储中,查询时我们不能一下子将所有数据加载到内存中,只能逐节点加载(一个节点一次IO)。如果我们利用二叉树作为索引结构,那么磁盘的IO次数和索引树的高度是相关的。平衡二叉树由于树深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。

在这里插入图片描述为了提高查询效率,就需要 减少磁盘IO数 。为了减少磁盘IO的次数,就需要尽量降低树的高度 ,需要把原来“瘦高”的树结构变的“矮胖”,树的每层的分叉越多越好。针对同样的数据,如果我们把二叉树改成 三叉树:

在这里插入图片描述上面的例子中,我们将二叉树变成了三叉树,降低了树的高度。如果能够在一个节点中存放更多的数据,我们还可以进一步减少节点的数量,从而进一步降低树的高度。这就是多叉树

普通树的问题

  • 左子树全部为空,从形式上看,更像一个单链表,不能发挥BST的优势。
  • 解决方案:平衡二叉树(AVL)

在这里插入图片描述

红黑树

特点

  • 同样是一种自平衡的二叉搜索树,但平衡性要求相对AVL树较低。
  • 节点通过颜色(红或黑)和旋转操作来维持树的平衡。
  • 长子树的高度不超过短子树的两倍。

在这个棵严格的平台树上又进化为“红黑树”{是一个非严格的平衡树 左子树与右子树的高度差不能超过1},红黑树的长子树只要不超过短子树的两倍即可!
在这里插入图片描述当再次插入7的时候,这棵树就会发生旋转
在这里插入图片描述

B树

  • 是一种多路搜索树(多叉树),每个节点可以拥有多个子节点和关键字。
  • 非叶子节点既保存索引,也保存数据记录。
  • 适用于大规模数据存储和减少磁盘I/O操作。

B+树

  • 是B树的改进版本,内部节点(非叶子节点)仅用于索引,不保存数据记录。
  • 所有数据记录都存储在叶子节点中,并且叶子节点之间通过指针相连,形成有序链表。
  • 提供了更好的顺序访问性能和更高的磁盘利用率。

应用场景

平衡二叉树(AVL树)

  • 适用于插入和删除操作较少、搜索操作频繁的场景。
  • 因为其严格的平衡性要求,导致插入和删除操作的性能开销较大,但在搜索效率上表现出色。

红黑树

  • 广泛用于各种常规应用,如Java中的TreeMap就是基于红黑树实现的。
  • 其平衡性要求相对宽松,使得插入和删除操作更加高效,同时保持了较好的搜索性能。

B树

  • 适用于处理大规模数据和磁盘存储的情况。
  • 通过增加每个节点的关键字数量来减少树的层级,从而减少数据查找次数和复杂度。
  • 在数据库索引技术中大量使用。

B+树

  • 比B树更适合实际应用中的操作系统文件索引和数据库索引。
  • 其内部节点更小,使得每次读取的关键字数量更多,降低了I/O读写次数。
    支持顺序访问,使得范围查询更加高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长风清留扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值