B树也是一种搜索树,二叉搜索树、红黑树、都是动态查找树,典型的二叉搜索结构,查找的时间复杂度和树的高度相关O(log2N)。
这些二叉搜索结构有一个共同的缺陷:数据量大,树的高度太高,增大访问磁盘的次数,从而效率低下。
想要加速对数据的访问速度:
1.提高I/O的时间
2.降低树的高度——平衡多叉树
B树的定义
一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足以下性质:
1.根节点至少有两个孩子。
2.每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子。
3.每个非根节点至少有M/2-1(上取整)个关键字,至多有M-1个关键字,并且以升序排列
4.key[i]和key[i+1]之间的孩子节点的值介于key[i]、key[i+1]之间。
5.所有的叶子节点都在同一层。
例:
插入{53,75,139,49,145,36,101};
M阶B树——M=3
3阶B树的插入过程:
代码实现过程:
1.首先设定结构体,实际只用到两个关键码,但是为了交换简单,我们设置三个关键码,孩子指针域始终比关键码多一个。
2.创建一个类将B树的函数操作封装起来。
3.B树的插入:
(1)根节点为空,开辟一个新节点newNode,将key的值赋给newNode,对size+1,最后使根指向newNode。
(2)根不为空,通过Find函数找到插入位置cur,通过_InsertKey()函数将key的值赋给cur,(cur->size)+1,判断cur->size与M的大小,如果cur->size < M则return true;
(3)如果cur->size=M,要将节点进行分裂,将中间的关键码向上提,ne