GESP 六级 · GESP 202606 C++ 六级 第 7 题

选择题 · 答案 A

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

题目

以下代码实现了二叉树的哪种遍历方式?

void traverse(TreeNode* root) {
    if (root == nullptr) return;
    cout << root->val << " ";
    traverse(root->left);
    traverse(root->right);
}
答案:A

解题思维

根据二叉树的遍历特性,先/前序遍历确定根节点,中序遍历确定左右子树范围,从而重构整棵树,再输出后序遍历结果。

常见错误

易混淆三种遍历的顺序。先序:根左右;中序:左根右;后序:左右根。注意遍历结果中相邻节点的关系。

详细解析(节选)

【考点】二叉树遍历|递归调用顺序|前序中序后序区分

1. 🎯 考纲定位 考查《GESP 六级大纲》算法模块核心的二叉树遍历知识。命题人放这道题不是为了考背诵,而是卡住 80% 考生对"先处理根节点"这一顺序的敏感度——很多人死记"左中右"口诀却分不清递归调用顺序,以为只要包含左右子树就是中序,这是典型的顺序感缺失。

2. 🧠 解题思维 解题核心是识别递归调用的顺序:代码先输出根节点值,再递归左子树,最后递归右子树,对应"根-左-右"的固定模式。这是前序遍历的标志性特征,与中序(左-根-右)和后序(左-右-根)形成严格区分。通法是看递归函数体内的操作序列,哪个位置处理当前节点就决定遍历类型。

3. 🪤 陷阱拆解 选项 B 中序的陷阱在于"左-根-右"口诀,但代码先输出根再递归左,顺序完全相反;选项 C 后序陷阱是"左-右-根",而代码根在前、左右在后。D 层序更隐蔽,它考察递归 vs 队列,但代码明显是递归调用而非循环,层序必须用队列实现。最阴险的是"左右顺序"——代码先左后右,若改成先右后左就是反向前序,命题人用这个细节筛掉死记硬背的人。

4. 🔄 反命题思维 反命题角度:若把递归调用顺序交换,代码变为"根-右-左"反向前序;若把输出移到两个递归调用之间,就是中序;移到最后则成后序。这提醒我们,遍历类型完全由"处理当前节点"与"递归调用"的先后顺序决定,而非节点内容。

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