408数据结构第7章:B树①——基础概念与结构

复习位置:数据结构 → 第7章 查找 → B树

这一篇只解决:关键字、阶、结点、孩子数量之间的关系。

一、B树是什么

B树可以理解成:

复制代码
"一个结点里可以放多个关键字"的平衡查找树。

它的目的之一是降低树高,从而减少查找时访问结点的次数。

二、什么是关键字

例如一个结点:

复制代码
[ 5 | 11 ]

这里的:

复制代码
5、11

就是两个关键字。

它们把查找范围切成:

复制代码
          [5 | 11]
         /    |    \
       <5   5~11   >11

所以最重要的关系:

复制代码
k个关键字
→ k+1棵子树

例如:

复制代码
2个关键字
→ 3棵子树

三、什么叫m阶B树

m阶表示:

复制代码
一个结点最多有m棵子树

所以最多有:

复制代码
m-1个关键字

直接记:

复制代码
最大子树数 = m
最大关键字数 = m-1

例如5阶B树:

复制代码
最多5棵子树
最多4个关键字

四、ceil(m/2)是什么意思

记作:

复制代码
⌈m/2⌉

意思是:

复制代码
m÷2后向上取整

例如:

复制代码
m=4 → ⌈4/2⌉=2
m=5 → ⌈5/2⌉=3

经常记:

复制代码
k = ⌈m/2⌉

它表示:

复制代码
除根以外的非叶结点,最少要有k棵子树。

五、m阶B树的核心规定

1. 每个结点最多

复制代码
m棵子树
m-1个关键字

2. 根结点如果不是终端结点

至少:

复制代码
2棵子树
1个关键字

3. 除根以外的非叶结点

至少:

复制代码
⌈m/2⌉棵子树

因此至少:

复制代码
⌈m/2⌉-1个关键字

4. 所有叶子结点在同一层

因此B树始终保持平衡。

六、终端结点和叶子结点

在常见408教材定义中:

复制代码
终端结点:
最下面一层真正存关键字的结点

叶子结点:
终端结点下面空指针所对应的外部结点

例如:

复制代码
       [5 | 11]
      /    |    \
   [1|3] [6|8] [13|15]
    ↓↓↓    ↓↓↓    ↓↓↓
    空      空      空

其中:

复制代码
[1|3]、[6|8]、[13|15]
→ 终端结点

最下面的"空"
→ 叶子结点/外部结点

七、查找过程

假设当前结点:

复制代码
[20 | 40]

查找35:

复制代码
35 > 20
35 < 40

所以进入中间子树。

基本流程:

复制代码
当前结点内比较关键字
→ 判断进入哪棵子树
→ 到下一层继续

八、考前速记

复制代码
m阶B树:

最多m棵子树
最多m-1个关键字

非根内部结点:
至少⌈m/2⌉棵子树
至少⌈m/2⌉-1个关键字

根若非终端:
至少2棵子树
至少1个关键字

k个关键字
↔ k+1棵子树
相关推荐
白狐_7982 分钟前
408 数据结构|外部排序:流程与 k 路归并
数据结构·算法
我不会起名字3222 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
不会就选b3 小时前
算法日常・每日刷题--<贪心+大根堆>2
数据结构·算法
事圆则缓3 小时前
Java 常见数据结构与 Android 使用场景
android·java·数据结构
白狐_7984 小时前
408 数据结构|外部排序优化:怎么减少时间开销
数据结构·算法
kiracrimson16 小时前
从缓存的角度看链表与线性表的差异
数据结构·链表·缓存
心抵鹊17 小时前
归并排序之翻转对(hard)
数据结构·算法
白狐_79820 小时前
408 数据结构|红黑树插入:只记两大类
数据结构
Lost of 程序猿1 天前
.NET 线程安全集合与并发数据结构深度实战:从 lock 到无锁
数据结构·安全·.net
机器学习之心1 天前
基于BiGRU-Attention的轴承剩余寿命预测(MATLAB实现):从振动信号到RUL曲线的完整闭环
数据结构·算法·matlab·轴承剩余寿命预测·振动信号·bigru-attention