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棵子树
相关推荐
开发小能手1237 小时前
答案daanC语言
数据结构·算法
启观川11 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
程序员清风12 小时前
堆与优先队列:从 Top K 到任务调度
java·数据结构·算法
suhan12 小时前
【数据结构】四、串:串string、模式匹配BF\KMP、广义表
数据结构·后端·算法
啵啵啵鱼12 小时前
第二章 线性表
java·数据结构·算法
局部有解13 小时前
Hot100 - 三数之和
数据结构·c++·算法
辉艺棉麻小张13 小时前
用 JSON 建模面料规格:成分、克重、支数与公定回潮率字段设计
数据结构
longlongzihan13 小时前
C++ 常用数据结构速查:vector、stack、queue、list、树、图、哈希表等声明与核心操作
数据结构·c++·list
爱读书的小胖17 小时前
LeetCode 27. 移除元素(C)解题分析
数据结构·算法
爱读书的小胖17 小时前
Codewars: A Brave New Wordle(C)解题分析
c语言·数据结构·算法