b+树的增删改查_数据结构专题——带你详解B+树

本文深入探讨了B+树的特性,包括数据存储在叶子节点、节点元素数量与子树数量一致及叶子节点形成链表。文章详细介绍了B+树的查找、增加、删除操作,强调了其在数据库中优化磁盘读写的优势。B+树的查找简化了判断,插入操作简化了插入位置的查找,删除操作则避免了中间节点的处理,整体实现难度相对较低。
摘要由CSDN通过智能技术生成

今天是分布式系统的第八篇文章,核心内容是B+树的原理。

今天的文章是上周B树的延伸,所以新关注的或者是有所遗忘的同学建议先从下方链接回顾之前的内容。

万字长文丰富图文详解B-树原理

B+树的特性

B+树和B树一样都是多路平衡树,也叫多叉树。两者的性质也基本一致,在具体来看详细内容之前,我们先来总体看下B+树的特性,先有个大概的印象。

我个人认为B+树大部分特性都和B树一样,唯一不同的只有以下几点:

  1. 所有的数据都存储在叶子节点,中间节点不存放数据
  2. 中间节点的元素数量和子树数量一致,而B树子树数量比元素数量多1
  3. 叶子节点是一个链表,可以通过指针顺序查找

我贴一张图,大家应该可以很直观地感受到。

787742d5091bcd20ed38330d3c29e150.png

从上图我们可以看到,所有出现在中间节点的元素都能在叶子节点当中找到,这对应了刚才说的所有数据都存放在叶子节点当中。然后我们还可以发现,中间节点当中的元素数量和子树数量一致,同样对应了区间分割。父节点的每个元素对应了一个子树中最大的元素。

至于最后的链表,应该很好理解,无非是链表出现在树当中,看起来有些新奇而已。

我看上图最大的感受就是像,和B树实在是太像了,就好像两个孪生兄弟,猛地看上去几乎一模一样,细微分辨才能发现一点差别。那么针对这样一颗熟悉又陌生的树,我们应该怎么去增删改查呢?

让我们继续往下看,在此之前,我想说一句,虽然B+树是B树的提升版,但是实现难度上,其实是降低的。也就是说整体而言,它比B树更容易实现

B+树的查

由于B+树当中所有的数据都存储在叶子节点,所以我们在查找的时候,必须要一直查找到叶子节点为止。也就是说不会再有中途退出的情况,这样就简化了我们的判断,几乎不再需要临时退出了。

另一个特性是B+树当中的元素数量和子树数量一致,并且每个元素都代表一棵子树当中的最大值。通过这个限制,我们可以很轻松地确定我们要查找的元素究竟在哪棵子树当中。而B树则有可能出现超界的情况,我们需要特殊判断。

举个例子,这是一棵B树:

b8eaed361ff24e9e73cf9e11d6e3dea1.png

假设我们查找的元素是12,我们在根节点当中判断,先通过二分查找查找到9,发现12 > 9,于是我们去最右侧的子树当中检查。

而如果是B+树,会是这样,为了作图方便,我省去了叶子节点中横向的指针。

36bdaeca8e0457791d2dcf7c7bbb3f2b.png

可以看到我们直接二分就可以精准地找到对应的子树,我们直接往下递归就好了。如果超界了,则说明肯定不在树上,可以提前返回。

所以这就是一个非常简单的树上查找,应该说只要理解了树的形状和递归的思路,应该是没有难度的。不过有一点需要注意,我们的查找接口并不只提供给外部,我们自己在插入的时候也

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值