GESP 六级 · GESP 202409 C++ 六级 第 10 题

选择题 · 答案 C · 考点:算法

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

题目

二叉树的深度定义为从根结点到叶结点的最长路径上的结点数,则以下基于二叉树的深度优先搜索实现的深度计算函数中横线上应填写( )。

// 定义二叉树的结点结构
struct tree_node {
    int val;
    tree_node* left;
    tree_node* right;

    tree_node(int x) : val(x), left(nullptr), right(nullptr) {}
};

// 计算二叉树的深度
int max_depth(tree_node* root) {
    if (root == nullptr) {
        return 0;  // 如果根结点为空,则深度为 0
    }

    int left_depth = max_depth(root->left);
    int right_depth = max_depth(root->right);

    ________________________  // 在此处填入代码
}
答案:C

考点

算法

解题思维

根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。

常见错误

填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。

详细解析(节选)

【考点】递归算法|二叉树遍历|深度定义

【考纲定位】本题考查递归算法在二叉树遍历中的应用(GESP六级递归模块),命题人卡住的是对递归返回值含义的理解——递归返回的是子树深度,而非子树节点总数。六级递归题普遍失分率高,核心弱点在于无法区分"深度"与"高度""节点数"等相似概念。

【解题思维】递归本质是"分而治之":先求左右子树深度(递归调用),再取最大值加1。空树深度为0是边界条件(B选项漏了+1导致空树返回0而非正确结果),sum(A、D)会重复计算路径,违背深度定义。关键观察:深度是"最长路径上的结点数",不是"路径长度"。

【陷阱拆解】A选项是典型陷阱:把左右子树深度相加,相当于计算了所有路径长度之和,而非最长路径。D选项加1的位置错误,sum+1会重复计算根节点。B选项最阴险——它直接返回子树深度最大值,忽略了当前根节点本身要计入深度(空树深度0是边界条件,但非空树必须+1)。命题人利用的是"递归返回值直觉"——学生容易把返回量想成累加量而非递推量。

【反命题思维】若把"深度"改成"节点总数",应填1 + left_depth + right_depth;若改成"高度"(边数),则B选项正确。刷到二叉树递归题先问:这题到底在算什么?——深度是层数,高度是边数,节点数是累加,三者本质不同。

同考点真题

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