B树的生成
B树的生成
flyfish 2015-7-19
从空树開始构建一棵B树 逐个插入keyword
规则:
除根结点之外的全部非终端结点至少有
⌈m/2⌉-1
依照A0,K1,A1。K2,A2,…,Kn,An
也就是指针个数比keyword个数多一个
由于树中每一个结点至多有m 棵子树。所以该结点的keyword个数不能超过m-1
也就是,keyword个数的阈值
每次插入一个keyword不是在树中加入一个叶子结点,由于这样不再是有效的B树而是首先在最低层的某个非终端结点中加入一个keyword,若该结点的keyword个数不超过m-1,则插入完毕,否则要产生结点的“分裂”
绿色:keyword个数
红色:指针
蓝色:keyword
构建Degree为3keyword从1到7的B树
普通情况下,结点可例如以下实现分裂 引用自严蔚敏《数据结构》
如果*p结点中已有m-1个keyword。当插入一个keyword之后。结点中含有信息为:
(m。
且当中
此时可将*P节点分裂为*P和*P’两个结点,
*p结点中含有信息
*p’结点中含有信息
m-
而keywordK
简化理解
m为B树的阶,n为节点的个数
若在一个包括
但若把一个新的keyword插入到包括m-1个keyword的结点中,则将引起结点的分裂。
生成一新结点,把原结点上的keywordK按升序排序,也就是
满足:左边的小于中间的keyword;右边的大于中间的keyword,从中间位置把keyword(不包括中间位置的keyword)分成两部分。
左部分所含keyword放在旧结点中。右部分所含keyword放在新结点中,中间位置的keyword连同新结点的存储位置(指向新节点的指针)插入到双亲结点中。
如果双亲结点的keyword个数也超过m-1,则要再分裂,再往上插入,此时B树可能朝着根的方向生长。