数据结构之查找算法:B树

思维导图:

在这里插入图片描述

B树的定义:

在这里插入图片描述

n:关键字的个数,由B树定义可知,m/2-1取上界 <= n <= m-1
p:指向子树的指针
k:关键字

例:

在这里插入图片描述

在这里插入图片描述
ps: 这是一颗三阶的树,所以每个节点最多只能有3颗子树
在这里插入图片描述
ps: 本质上是绝对平衡,即左右子树高度差为0

在这里插入图片描述ps: 3/2取上界为2,即每个非叶节点至少有2颗子树

在这里插入图片描述ps:
节点的关键字必须按从小到大的顺序排序
每个节点左子树的关键字小于该节点关键字,右子树大于该节点关键字
在/这里插入图片描述

n个关键字,阶数为m,高度为h的B树的高度计算

最小高度:
在这里插入图片描述

ps:
h最小的时候就是每层节点数都取最大的时候,就是满二叉树的时候
所以总的节点个数为后面括号所示
又每个节点的关健字最大为m-1个
所以乘起来即为最大的关键字数

最大高度:
在这里插入图片描述在这里插入图片描述

ps:
h最小的时候就是每层节点数都取最小的时候
第一层的关键字个数最小为1,则第二层的子树为2,即第二层有俩个节点
每个节点的最小关键字为m/2取下界个,所以第二层总关键字数为2倍的m/2取下界个
以此类推,第h层总关键字数为2倍的(m/2取下界)的h-1次幂
又一个节点对应一个关键字(最小)且第h层为查找失败节点个数 = 查找成功节点个数 + 1 = n+1

基本操作:

查找:

在这里插入图片描述ps: 查找32
因为18<32<33,所以查找关键字18右边、33左边的子树,即23、30这个节点的子树
又30<32,所以查找关键字30右边的子树,即3、32这个节点的子树
查找成功,找到32

插入:

在这里插入图片描述例:
初始:
在这里插入图片描述插入:
在这里插入图片描述分裂:(这是一颗三阶数,所以每个节点的关键字最大为2,19、20、21不满足,所以分裂)
在这里插入图片描述在分裂:
在这里插入图片描述在分裂:
在这里插入图片描述

删除:

在这里插入图片描述

对终端节点的删除:

在这里插入图片描述
例1: (兄弟够借的情况)
初始:
在这里插入图片描述
从左兄弟借:
在这里插入图片描述在这里插入图片描述或者从右兄弟借:(原理相同)
在这里插入图片描述
例2:(兄弟不够借的情况)
初始:
在这里插入图片描述合并:
在这里插入图片描述在这里插入图片描述

对非终端节点的删除:

在这里插入图片描述

例1:
初始:
在这里插入图片描述删除:(用左子树最右侧的关键字替换,然后删除被替换的节点)
在这里插入图片描述例2:
初始:
在这里插入图片描述删除:(用右子树最左侧的关键字替换,然后删除被替换的节点)
在这里插入图片描述例3:
初始:
在这里插入图片描述删除:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
B树是一种平衡查找树,其特点是能够在相对较短的时间内完成查找、插入和删除操作,因此在文件系统和数据库系统中被广泛应用。 B树的定义如下: 1.每个节点最多有m个子节点; 2.除根节点和叶子节点外,其他节点至少有ceil(m/2)个子节点; 3.如果根节点不是叶子节点,则至少有两个子节点; 4.所有叶子节点都在同一层次上。 B树的基本操作包括:查找、插入和删除。 查找操作与二叉查找树类似,从根节点开始递归查找。插入和删除操作需要维护B树的平衡性,即保证每个节点的子节点数在一定范围内。 插入操作的过程如下: 1.从根节点开始查找,找到合适的叶子节点; 2.如果叶子节点未满,则直接插入; 3.如果叶子节点已满,则进行节点分裂,将中间的关键字上移到父节点,并将左右节点分别作为父节点的子节点。 删除操作的过程如下: 1.从根节点开始查找,找到待删除的关键字所在的节点; 2.如果待删除的关键字在叶子节点上,直接删除; 3.如果待删除的关键字在非叶子节点上,找到它的前驱或后继关键字,用它来代替待删除的关键字,并删除前驱或后继关键字。 B树的性能优于二叉查找树,因为B树的每个节点可以存储多个关键字,从而减少查找路径的长度。B树的平衡性也能保证树的高度相对较小,从而提高查找、插入和删除操作的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值