0
点赞
收藏
分享

微信扫一扫

(未完成,更新中)我的B树学习记录

花海书香 2023-05-03 阅读 67
b树

2023年5月3日,周三下午:

今天下午收集够了学习所需的资料和网站,可以开始学习B树了,

我不会一次更新完,因为五一假期要结束了,但是只要有空我就会更新,直到写完这篇博客。


基本概念:

阶是一个节点所能容纳的最大子节点数。如果一个B树是5阶的,那么这意味着这棵B树的每个节点下最多只能有5棵子树:

B树的特点

一棵M阶的B树应具有如下特点:

1、树中每个节点下最多只能有m棵子树。

2、如果根节点不是叶子节点,那么至少要有2棵子树。

3、除了根节点和叶子节点外,其他所有的节点至少要有⌈m/2⌉棵子树

“⌈ ⌉”是向上取整的意思,⌈3.6⌉=4,⌈3.4⌉=4,⌈3.1⌉=4,⌈3⌉=3。注意,向上取整可不是四舍五入,只要小数点右边的数不是0,就得通过加1的方式向上取整。

4、只要不是叶子节点,那么节点就必须包含如下数据:

(n,A0,K1,A1,K2,A2,...,Kn,An)

对,你没看错,没有K0...

n是关键字的个数,n应满足这样的条件:⌈m/2⌉-1<=n<=m-1

K是key的意思,也就是关键字,而且从左往右,K越来越大

A是一个指向子树的根节点的指针,而且Ai所指向的子树中的所有节点的关键字都要大于Ki,小于Ki+1

此外,节点中其实还可以包含指向父节点的指针和指向关键字对应的值(这里的值我想应该是一块比较大的数据)的指针

所以有时你会在B树的节点的定义上看到指向父节点的指针

5、所有的叶子结点都必须在同一层上

现在我来画一个3阶B树,符合上述的所有特点

现在可以给出用C语言实现的B树的节点的定义了

typedef int KeyType; //规定key的数据类型

typedef struct _BTreeNode{
	int key_num; //key的数量
	KeyType *keys; //key数组
	struct _BTreeNode **children; //指向子树的根节点的指针的数组
	int leaf; //用来判断是不是叶子节点
}BTreeNode; 
举报

相关推荐

0 条评论