B树
B树的应用
B树通常是为辅存设计的一种平衡搜索树
性质:
1.结点:
如果有n个关键字,
则在结点中是非递减存储,
有一个布尔变量标识结点是否是leaf叶子,
有n+1个孩子结点,且是按关键字分隔点指向的(n个关键字有n+1个分隔点)
2.高度:叶结点具有相同高度
3.关键字上界与下界
定义t>=2中2*t为B树的阶(出度最多为2*t),t为B树的?
除根结点,每个结点至少t-1关键字,t个孩子,根至少一个关键字(非空的情况下)
每个结点至多2*t-1个关键字,至多2*t个孩子,
当t=2时,B树即是2-3-4树
B树上的查找
B-TREE-SEARCH(x,k)
i=1
while i<=x.n &&k>x.key
i++;
if(i<=x.n&&k==x.key)
return (x,i);
else if x.leaf==TRUE
return NULL;
else DISK-READ(x,ci)
return B-TREE-SEARCH(x.ci,k)
B树的插入
需要引入操作:
分裂
插入总是向合适的叶结点中插入,一旦超过该结点能存储的最大个数,就开始按中间关键字分裂,同时将中间关键字提升到父节点,逐步上升到根结点,
如果根结点也需要分裂,此时B树的高度加1(B树高度增长发生在顶部,与二叉搜索树在底部不同)
B树的删除
删除某个关键字k// 较复杂 先放放 by zjerry