X32专项练习部分22
构建5阶B树
/*
在一个空的5阶B-树中依次插入关键字序列{6,8,15,16,22,10,18,32,20}
插入完成后,关键字6所在结点包含的关键字个数为
正确答案: B
2
3
4
5
这里先补充1个构建5阶B树的过程
比如用关键字序列
{1,2,6,7,11,4,8,13,10,5,17,9,16,20,3,12,14,18,19,15}
来构建一棵B-树
由于是5阶B树
每个节点最多有5个子节点
所以每个节点内部关键字个数为1-4个
于是,第一步是插入1,2,6,7作为一个节点
然后插入11,得到1,2,6,7,11. 因为节点个数超过4,所以需要对该节点进行拆分
选取中间节点6,进行提升,提升为父节点
见图1-1
接着插入节点
因为最右下的节点内有5个元素,超过最大个数4了,所以需要进行拆分
把中间节点10进行提升,上升到和6一起
见图1-2
接着插入节点
当插入20的时候
有1个节点内部关键字数量又超过4个了
需要再次拆分,16提升为父节点
见图1-3
当插入完15关键字
提升完父节点
会发现最高父节点内部关键字数量超过4个
需要提升中间值为父节点
于是10成为最高父节点
见图1-4
重点在于
把一个节点提升为父节点的时候千万别忘了拆分
这道题我构建了1把
6关键字所在节点包含6 8 10
兄弟节点分别包含关键字
16,18
22,32
最高父节点为15,20
*/
1-1
1-2
1-3
1-4
构建平衡二叉树
/*
依次将关键字序列7, 6, 4, 10, 8, 11插入到一棵空的平衡二叉树中
插入后的平衡二叉树的根结点为
正确答案: D
7
6
10
8
平衡二叉树:
是一种特殊的二叉排序树,其左右子树都是平衡二叉树
要求BF(平衡因子=其左子树高-其右子树高)只能取0,1,-1
注意这道题是边插入边调整
插入4的时候调整1次
插入8的时候调整1次
当时是
7
\
10
/
8
通过二叉排序树特点可知
当前节点右子节点的左子节点
一定介于当前节点和当前节点的右子节点