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棵子树
相关推荐
m0_547486663 天前
《数据结构教程》全套 PPT课件2026
数据结构
tryxr3 天前
矩阵的几种基础变换
java·数据结构·算法·矩阵
mmmmath_33 天前
LeetCode.028.找出字符串中第一个匹配项的
数据结构·算法·leetcode
All for pursuit.3 天前
【栈-4】739.每日温度
数据结构·c++·算法·leetcode
All for pursuit.3 天前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
渡我白衣3 天前
HttpRequest与HttpResponse的实现
服务器·数据结构·c++·人工智能·tcp/ip·机器学习·caffe
晴天的雨.9923 天前
【C++算法】和为s的两个数
开发语言·数据结构·c++·算法
淡海水4 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
Logic1014 天前
C语言/数据结构位运算题解:异或XOR找出时尚聚会中的“独特颜色“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
2401_839080544 天前
C++常见八股
数据结构·c++·算法