Skip to content

2020年 408 数据结构 第 5 题

数据结构2020年选择题2分

题目

下列给定的关键字输入序列中,不能生成如下二叉排序树的是( )。

42135

错因

A

直觉上"先插 5 之后再插 2、1、3 应该会破坏左右结构",于是错选 A。其实 5 走到 4 的右子树独立成枝,与左子树(后续插入的 2,1,3)互不影响——结构最终仍是 。BST 插入只看大小关系,不看插入先后。

C

被"5 在 2 之后插入"迷惑——觉得"应该先插 5 再插 2"才合理。其实 4 之后无论先插 2 还是先插 5,2 和 5 各走一边互不交叉。3 走到 4 左子树后比 2 大成为 2 的右孩子,1 比 2 小成为左孩子,最终仍是给定结构。

D

被"5 最后才插入"迷惑,认为"5 应该在前面就插好"。但 BST 的子树根不一定先插入——节点最终位置由比较路径决定,与插入顺序无关。D 序列依次得到 ,正好是题目给的结构。

总解析

核心规则:BST 插入新节点时,从根开始按"小走左、大走右"找到第一个空位放下,先插入的节点更靠近根。所以一旦确定了根,剩下两个子树是相互独立的——左右子树里节点的相对插入顺序互不影响。

逐个验证四个选项:

A.

插入比较路径结果
14空树根 = 4
255 > 4 → 右4 的右孩子
322 < 4 → 左4 的左孩子
411 < 4 → 左; 1 < 2 → 左2 的左孩子
533 < 4 → 左; 3 > 2 → 右2 的右孩子

得到

B.

插入比较路径结果
14空树根 = 4
255 > 4 → 右4 的右孩子
311 < 4 → 左4 的左孩子是 1(不是 2!)
421 < 2 < 4,走 4 左 → 1 的右1 的右孩子
531 < 3 < 4,走 4 左 → 1 右 → 比 2 大走右2 的右孩子

得到的树是:

41235

4 的左孩子是 1,不是题目给的 2。所以 B 不能生成给定的 BST。

C.

依次:根 4 → 2 是 4 的左 → 5 是 4 的右 → 3 走左到 2 后比 2 大成右 → 1 走左到 2 后比 2 小成左。得到

D.

依次:根 4 → 2 是 4 的左 → 1 是 2 的左 → 3 是 2 的右(3 < 4 走左、3 > 2 走右)→ 5 是 4 的右。得到

关键观察:要生成 ,必须满足"2 比 1、3 先插入"(否则 4 的左孩子就成了 1 或 3)。B 中 1 在 2 之前插入,违反此条件。

最终答案是 B(4, 5, 1, 2, 3)

速判技巧:题目要求生成的结构里 4 的左孩子是 2,所以序列里 2 必须比 1 和 3 先出现(在 4 之后);类似地 4 的右孩子是 5,5 必须比所有比 5 大的元素先插入(本题没有比 5 大的元素,所以 5 的位置不受约束)。用这个原则一眼能筛掉 B(B 中 1 在 2 之前)。

最后更新:

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

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