B树(多路平衡查找树)就是二叉排序树的一般化, 可以理解为M叉排序树
B树非常适合读取和写入相对较大的数据块(如光盘)的存储系统;它通常用于数据库和文件系统
m阶B树满足条件:
B树性质:
结点的孩子个数等于该结点中关键字个数+1
如果根结点没有关键字就没有子树,此时B树为空
根结点子树数
其他结点子树数
结点中关键字从左到右递增有序,关键字两侧均有指向子树的指针,左边指针所指子树的所有关键字均小于该关键字,右边指针所指子树的所有关键字均大于该关键字
n个关键字的B树必有n+1个叶子结点,
B树的高度
现在b树上查找结点,然后在结点内查找关键字
与二叉排序树的查找相似(只是多了个结点内的查找,可以顺序查找或者折半查找)
先往一个结点里放,放满了就把这个结点分成3个结点,中间的关键字作为父结点,中间关键字的左右两边分别作为左右子结点
在插入key后,若导致愿结点的关键字数超过上限,则从中间位置(
新元素一定是插入到最底层“终端结点”,用“查找”来确定插入位置
B树的失败结点只能出现在最下边一层
子结点插满
子结点插满,父结点也插满
插入操作的核心要求
被删除关键字在终端结点
直接删除
需要注意结点关键字是否低于下限
删除后低于下限
右兄弟够借就用当前结点的后继、后继的后继依次顶替空缺
左兄弟够借就用当前结点的前驱、前驱的前驱依次顶替空缺
都不够借酒与父结点内的关键字、左(右)兄弟进行合并,合并后导致父结点关键字数量-1,可能需要继续合并
被删除关键字在非终端结点
用直接前驱或直接后继来代替被删除的关键字
直接前驱:当前关键字左侧指针所指子树中“最右下”的元素
直接后继:当前关键字右侧指针所指子树中“最左下”的元素
使用直接前驱或直接后继结点代替后就转化为了对终端结点的删除操作