B树

本文详细介绍了B树这种平衡多路查找树的数据结构,包括其性质、查找、插入和删除操作。在B树中,每个节点最多有m个子树和m-1个关键字,插入和删除操作需要维护树的平衡,可能涉及分裂、合并及借用关键字等策略。删除操作在终端节点和非终端节点上有不同处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

B树

一种平衡多路查找树

平衡的意思就是左右子树高度差不超过1

多路查找就是有多条路径来查找

树中结点最大的孩子数目成为B树的阶。记为m

B树的性质

一颗m阶B树要么是空树,要么是满足以下特性的m叉树

*1*树中每个结点最多有m棵子树,最多有m-1个关键字。即棵子树夹着一个关键字

*2*若根节点不是终端结点,则最少有两个子树。即至少一个关键字

*3*除根结点之外的所有 非叶节点 至少有m/2棵子树,即至少m/2-1个关键字

*4*所有叶结点出现在同一个深度,不带信息。

非叶结点的结构

ki是关键字(递增),pi是子树根结点的指针

 

查找操作

根据关键字来查找,不赘述

 

插入操作

因为有关键字数量,平衡的限制,所以不可以像二叉搜索树那样找到终端结点位置插入。

其中很重要的操作:分裂,如果结点上的关键字数量大于m-1,则要进行分裂操作

分裂操作方法(两种情况):

>如果父结点是饱和的话:关键字数量等于m-1(性质1,最多有m-1个关键字)

把关键字数组中的中间关键字作为新结点,然后其他关键字形成两个结点作为左右孩子。

>如果父结点不饱和的话:可以把中间结点和父节点合并,之后处理之外的结点。

删除操作

分为在终端结点非终端结点

删除终端结点:

①如果关键字数量>[m/2]-1, 直接删除

②如果关键字数量=[m/2]-1,并且兄弟结点中有关键字数量>[m/2]-1的结点,则去兄弟结点借关键字。

比如删除2

 

把兄弟结点的小关键字拿上去,与父结点换位,然后把2删除

 

 

③如果关键字数量=[m/2]-1,并且兄弟结点中没有关键字数量>[m/2]-1的结点,则需要进行结点合并

删除16

不可以直接删除16,因为删除之后不满足b树的定义

所以得进行合并。

上层取关键字与下层结点合并

方法不唯一,可以合并14-11或者20-22

删除非终端结点:

需要转换成在终端结点上,再按照终端结点来操作

 

相邻关键字:对于不在终端结点上的关键字,它的相邻关键字是其左子树中值最大的关键字或者右子树中值最小的关键字。

情况一:存在关键字数量大于[m-2]-1结点的左子树或者右子树

step1:

找出待删除关键字的相邻关键字

step2:

将这个待删除的关键字和某个相邻关键字互换,与9互换或者11都可以转化成删除终端结点

 

情况二:不存在关键字数量大于[m-2]-1结点的左子树或者右子树

比如14

则将左右子树合并,然后删除待删除的关键字

 

变成这样

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值