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棵子树
相关推荐
老师我太想进步了202619 小时前
【数据结构-4】算法美学之顺序表
数据结构·算法
GrowingIO技术社区1 天前
CDP、行为分析、归因与营销自动化有什么区别?
数据结构·数据挖掘·数据分析
GrowingIO技术社区1 天前
实时标签怎样验收?从数据更新到分群可用
数据结构·数据挖掘·数据分析
老师我太想进步了20262 天前
【数据结构-3】算法美学之降复杂度
数据结构·算法
w_zero_one3 天前
算法--构造
java·数据结构·算法
lisw053 天前
互联网上的数据结构可视化!
数据结构·信息可视化
老师我太想进步了20263 天前
【数据结构-1】例解算法复杂度
数据结构·算法
YSL0701243 天前
一文通关-----排序
数据结构·算法
夜不会漫长4 天前
C++:红黑树
数据结构·算法
冻柠檬飞冰走茶4 天前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法