Appearance
题目
下列关于非空 B 树的叙述中,正确的是( )。
I. 插入操作可能增加树的高度
II. 删除操作一定会导致叶结点的变化
III. 查找某关键字一定要查找到叶结点
IV. 插入的新关键字最终位于叶结点中
错因
A
只确认了 I 对(插入溢出会一路分裂上推到根,根分裂时高度 +1),但错过了 II。常见原因是只想到了"删叶子节点"的简单情形,没意识到"删内部节点"也是用前驱/后继(在叶子里)顶替——最终落到叶子被删的总是某个关键字。所以 II 也对。
C
把 B 树和 B+ 树搞混了。
- B+ 树:所有关键字只在叶子。查找必到叶子(III 对),插入也只在叶子(IV 对)。
- B 树:每个节点都存关键字。查找在内部节点就可能命中(III 错);插入溢出时,分裂上推的可能正是新插入的中位数关键字,最终留在内部节点(IV 错)。
考研题里"非空 B 树"特指狭义 B 树,不能套 B+ 树的结论。
D
把 IV 算对,多半是把"插入操作起始位置在叶子"等同于"插入的关键字最终在叶子"。起始位置确实在叶子(先沿索引下降找叶节点再插),但分裂时的中位数关键字会上推到父节点——如果新插入的恰好是分裂时的中位数,它就跑到内部节点了。例:5 阶 B 树,叶节点 [1, 3, 5, 7] 已满(4 个关键字),插入 4 → 暂存 [1, 3, 4, 5, 7] → 分裂为 [1, 3] 和 [5, 7],中位数 4 上推。新关键字 4 最终在内部节点。
总解析
逐项判断
I. 插入操作可能增加树的高度 ✓
B 树插入只发生在叶节点。叶节点关键字数超出 ( 阶 B 树)就分裂,中位数上推到父节点;父节点也可能溢出再分裂;最终若根也分裂,会创建新根,树高 +1。所以"可能",不是"一定"。
II. 删除操作一定会导致叶结点的变化 ✓
- 删的是叶节点的关键字 → 直接删,叶节点变化(可能后续合并/借位)。
- 删的是内部节点的关键字 → 先用其中序前驱或后继(必在某个叶节点中)替换它,再去叶节点里删那个前驱/后继 → 叶节点变化。
无论哪种情形,最后总有叶节点的关键字被删掉。
III. 查找某关键字一定要查找到叶结点 ✗
B 树的所有节点都存关键字。查找在内部节点比较时,若命中关键字,直接返回——不必下到叶子。这点是 B 树和 B+ 树的关键差异。
IV. 插入的新关键字最终位于叶结点中 ✗
新关键字是先插到叶子,但若引发分裂,分裂时的中位数会上移到父节点。如果中位数恰好是新插入的关键字(参见错因 D 中的例子),它就跑到内部节点了。
结论:I、II 正确,III、IV 错误。
最终答案是 B(仅 I、II)。