Skip to content

2025年 408 数据结构 第 3 题

数据结构2025年选择题2分

题目

若二叉树的节点值均为正整数,采用顺序存储方式保存在数组 R 中,用 -1 表示节点不存在,则下列数组中,不能表示一棵二叉树的是()。

错因

A

担心下标 5 上的 35 之前出现两个 -1,误以为"前面有 -1 后面就不能再有数据"。这种紧凑规则只适用于完全二叉树的"压缩存储";本题用 -1 显式占位 = 通用顺序存储,下标和位置一一对应,关键看每个数据节点的父节点是否存在。35 在下标 5,父下标 (5−1)/2 = 2,R[2] = 40,父存在 → A 合法。

B

看着深、节点多,容易猜"非法"。但逐个核对:18 的父在下标 1(=40)✓;35 的父在下标 1(=40)✓;下标 5、6 的 -1 表示 10 没有子节点。整棵树是 15 为根、40 为左孩子(含 18、35 两个孩子)、10 为右孩子的合法形态。

C

下标 3、4、5 全是 -1 却在下标 6 出现 12,第一反应是"中间空了不合法"。但下标 6 对应"下标 2 处节点(= 10)的右孩子",10 真实存在 → 12 有合法父节点。下标 3、4 是 40 的左右孩子(说明 40 是叶);下标 5 是 10 的左孩子(说明 10 没有左孩子);下标 6 = 10 的右孩子(即 12)。结构成立。

总解析

思路:在 0 起始下标的顺序存储中,下标 节点的父节点位于 合法性判据:每个非 -1 的数据节点都必须有一个非 -1 的父节点(根除外);如果出现"父是 -1 但孩子不是 -1",违反二叉树定义。

记下标 处的元素为 ,父下标为

A 验证

i012345
R[i]201540-1-135
父下标00112
父值20 ✓20 ✓15 ✓15 ✓40 ✓

每个数据节点的父都存在,合法。

B 验证:依次检查每个数据节点的父值(15、40、10),均存在 → 合法。

C 验证:12 在下标 6,父在下标 2,R[2] = 10 ✓;其他位置都是叶子或缺位 → 合法。

D 验证

i0123456789
R[i]172035-11845-1-11927
父下标001122334
父值171720203535-1-118

下标 8 的值是 19,但其父在下标 3,R[3] = -1(不存在)。没有父节点的孩子在二叉树中不允许存在——孩子必须挂在某个真实节点下,不能凭空冒出。

(下标 9 的 27 父在下标 4 = 18,本身合法,但 D 已被下标 8 的非法节点否定。)

最终答案是 D

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题