Skip to content

2009年 408 数据结构 第 6 题

数据结构2009年选择题2分

题目

将森林转换为对应的二叉树,若在二叉树中,结点 u 是结点 v 的父结点的父结点,则在原来的森林中,u 和 v 可能具有的关系是( )。 I. 父子关系 II. 兄弟关系 III. u 的父结点与 v 的父结点是兄弟关系

错因

A

只想到了 "u 右-w 右-v 右" 这条全兄弟链——u, w, v 在原森林里同辈,所以判 II 兄弟成立;却没考虑 "u 左-w 左" 在原森林里就是 "u→w 父子,w→v 父子",这种链下 v 仍是 u 的孩子(再往下一层),不能直接当父子关系数。漏掉的关键是 "u 左-w 右"——w 是 u 的第一个孩子时它的右孩子是它的下一个兄弟,于是 v 也成了 u 的孩子,这才让 I 父子关系成立

C

把 III 误读成了"u 是 v 的祖父,所以 u 父和 v 父理应是兄弟"。这是把森林里"祖孙隔一辈"的常识硬套到二叉树上。但二叉树里 u 是 v 的祖父只意味着 u 和 v 之间隔一个 w,原森林的关系完全由 w 是 u 的左/右孩子、v 是 w 的左/右孩子两个二选一决定——四种组合穷举完都不会出现"u 父和 v 父是兄弟"这种跨两个父代的关系。

D

把 III 也算上是同一个误区(详见 C),同时把 II 也判对了——多选反而暴露了根本没逐条枚举。考研常见陷阱:"看着合理"和"两步路径推得出"是两件事,必须用四种 (左/右) × (左/右) 组合穷举一遍才能下结论。

总解析

森林转二叉树采用"左孩子右兄弟"规则:节点 x 在二叉树中的左孩子 = x 在森林中的第一个孩子;右孩子 = x 在森林中的下一个兄弟。

u 是 v 的祖父(相隔一个节点 w)意味着有两层父子关系,需枚举 w 与 u、v 与 w 的关系各两种(左/右),共四种子路径:

w 是 u 的v 是 w 的在原森林中 u 与 v 的关系
左孩子左孩子u 是 w 的父,w 是 v 的父 → u 是 v 的祖父
左孩子右孩子u 是 w 的父,v 是 w 的下一兄弟 → v 的父也是 u,即父子关系(I)
右孩子左孩子w 是 u 的下一兄弟,v 是 w 的孩子 → u 与 v 叔侄关系(不在 I/II/III 中)
右孩子右孩子w 是 u 的下一兄弟,v 是 w 的下一兄弟 → u、w、v 同层 → u 与 v 是兄弟关系(II)

可能的关系只有 I 和 II,III 不能由两步路径产生。答案 B

最后更新:

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

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