Skip to content

2013年 408 数据结构 第 6 题

数据结构2013年选择题2分

题目

在任意一棵非空二叉排序树 T1 中,删除某结点 v 之后形成二叉排序树 T2 ,再将 v 插入 T2 形成二叉排序树 T3 。下列关于 T1 与 T3 的叙述中,正确的是( )。

I. 若 v 是 T1 的叶结点,则 T1 与 T3 不同

II. 若 v 是 T1 的叶结点,则 T1 与 T3 相同

III. 若 v 不是 T1 的叶结点,则 T1 与 T3 不同

IV. 若 v 不是 T1 的叶结点,则 T1 与 T3 相同

错因

A

把 II 错判成 I——以为"叶节点 v 删完再插,路径要重走、可能挂到别的位置"。但 BST 的插入是确定性的:只要 T2 = T1 删去 v 后的结果(即除 v 之外其他节点结构完全保留),插入 v 时按值比较走出来的路径与原来一模一样,最终落在原来那个空位上。所以 I 错、II 对。

B

I 和 IV 同时错。I 已分析;IV 错在"非叶节点删除会动用前驱/后继替代,结构必变,再插入只能成为新叶子"——v 在原树是分支节点(有子),插回来时按 BST 规则只能挂在某个空指针处变成叶子,不可能恢复"有子"的状态。

D

II 对,但 IV 也错(同 B)。选 D 的人通常确实理解了叶节点情形(II 对),但没看穿非叶情形里"v 在 T3 里只能当叶子"这一点——因为插入算法永远把新节点挂到某个空位,无法让它在树中部 "撑开"原来的子树。

总解析

分两种情况推演

情况一:v 是 T1 的叶子

删除叶子是最简单的删除——直接断开 v 与父亲的连接,其他节点的位置/父子关系完全不变

T2 = T1 \ {v},结构上除了 v 缺一席之外其他节点都在原位。

再插入 v:BST 插入按"小于走左、大于走右",从根开始走的路径完全由"v 的值"和"沿途节点的值"决定。沿途节点既然没变,路径就一字不差地重走原来到 v 的那条路;终点是同一个空位置(即原来 v 的位置)。

T3 与 T1 完全相同。✓ II 成立。

情况二:v 是 T1 的非叶(有孩子)

非叶删除有标准做法(任选其一):

  • 用 v 的直接后继(v 右子树的最左节点)替代 v
  • 或用 v 的直接前驱(v 左子树的最右节点)替代 v

无论哪种,T2 的结构都和 T1 不一样——原本"v 顶在某个内部位置"的拓扑被改写了,替代节点抢占了 v 的位置,自身原来的子位置被它的子(或空)顶上。

再插入 v 到 T2:BST 插入只把新节点挂到某条搜索路径终点的空指针处,必然成为新的叶子。但 v 在 T1 里是有子节点的内部节点,T3 把它放到叶子位置,结构不可能与 T1 一致。

T3 与 T1 必不同。✓ III 成立。

小例验证(情况二)

设 T1:

53247

删除非叶 3(用其直接后继 4 替代):

5427

插入 3:3 < 5 → 左;3 < 4 → 左;2 已在左,3 > 2 → 2 的右子,挂上:

54237

T3 ≠ T1(3 从 T1 的内部节点变成 T3 的叶子)。

结论

正确陈述:II + III ⇒ 选 C

速记:BST 里"删一个再插同一个"——叶子删插复原,非叶删插结构必变。本质是因为插入算法"只能挂叶子",无法把节点放回原来的内部位置。

最终答案是 C(仅 II、III)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数