GESP 六级 · GESP 202603 C++ 六级 第 21 题

判断题 · 答案 A

← 整套速查表 GESP 六级 全部真题

题目

在 C++ 中使用一维数组 vector<int> tree 存储按层序遍历的完全二叉树时,若根节点存储在 tree[0],则对于任意非节节点 tree[i],其右孩子(如果存在)必然位于 tree[2 * i + 2]。

答案:A

解题思维

仔细审题,明确已知条件和所求目标,运用相关知识点逐项分析。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】数组表示的二叉树|完全二叉树性质|索引规律

GESP 六级《数据结构基础》中,完全二叉树的数组存储是核心考点。命题人不是考你背结论,而是考你理解"为什么右孩子一定是 2i+2"——这是遍历与存储的底层逻辑,卡住的是只背公式不思考推导的考生。

解题链很简单:看到"数组存二叉树"先想层序遍历的索引规律。根在 0,左孩子 2i+1,右孩子 2i+2。题目问右孩子,直接套公式。关键是"非叶节点"这个限定——叶节点没有右孩子,但题目加了"如果存在"的缓冲,所以公式依然成立。

陷阱在这里:选项 B 想让你怀疑"非叶节点才有右孩子,那公式是不是只适用于非叶节点?"其实公式对任意节点都成立,只是叶节点的 2i+2 越界而已。命题人用"非叶节点"制造伪命题,利用你对"节点类型"的过度关注。还有"如果存在"这个缓冲词,很多人会忽略,以为题目在考边界条件,其实它只是让公式在叶节点上依然成立。比如节点 3(左孩子)的右孩子位置是 2×3+2=8,如果树没到第 4 层,8 就越界,但题目说"如果存在",所以 8 就是右孩子位置,哪怕它不存在。

反命题视角:如果把"右孩子"改成"左孩子",答案还是 A;改成"父节点",就得是(i-1)/2;改成"深度",就得是 floor(log₂i)+1。记住,数组存树的核心就是"索引规律",刷到类似题先问自己"命题人想考我索引还是考我节点类型"。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断