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棵子树
相关推荐
我变成萤火虫3 小时前
河南萌新联赛2026第(三)场:郑州轻工业大学
数据结构·c++·算法·贪心算法·stl·深度优先·哈希算法
Suxing94 小时前
C语言基础分享:从“租房”到“拆迁”,C语言动态内存管理
java·数据结构·算法
LuminousCPP4 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃5 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
c238565 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
OpenApi.cc5 小时前
MoCode — AI Agent Server (Docker) + macOS Desktop Client(开源项目)
数据结构·人工智能·深度学习·神经网络
Mem0rin5 小时前
二分查找:左右边界
数据结构·算法
lazily-c5 小时前
数据结构模板
数据结构
祖力5514 小时前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表