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

选择题 · 答案 C

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

题目

以下代码实现了二叉树的( )。

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

解题思维

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

常见错误

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

详细解析(节选)

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

🎯 考纲定位 GESP六级“树与递归”模块必考题型,命题人专盯那些背过“左中右”口诀却分不清递归调用顺序的选手——这道题就是卡死对遍历次序理解不深的人。六级大纲明确要求掌握三种递归遍历,但多数考生只记得口诀顺序,没真正理解代码执行流程,遇到变式题就懵。

🧠 解题思维 看到递归函数先调左右子树再输出根节点,立刻锁定“后序遍历”通法——递归调用顺序决定遍历类型:先左后右再根=后序,先根后左右=前序,左根右=中序。这道题的关键是识别cout在两个递归调用之后执行,属于典型的“处理完子节点再处理根”的模板,对应后序遍历的三步骤:遍历左子树→遍历右子树→访问根节点。

🪤 陷阱拆解 A项前序遍历是“根左右”,输出得在递归调用前;B项中序是“左根右”,输出夹在中间;D项层序遍历用队列实现,根本不会递归。命题人把代码顺序打乱,只改了一行cout位置就能区分所有选项,若只记结论不看调用顺序必选错。最阴险的是D项,层序遍历虽然也是二叉树遍历,但实现方式完全不同,用队列按层级访问,不会涉及递归调用,这是利用考生对遍历方式熟悉度的陷阱。

🔄 反命题思维 若把cout移到函数开头,立刻变成前序遍历;若移到左右递归之间,就成中序。刷到递归树题先自问“输出在递归调用哪一步”,这才是命题人想让你建立的思维习惯。

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