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

判断题 · 答案 A · 考点:函数与递归

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

题目

以下代码能够正确统计二叉树中叶子结点的数量。

int countLeaf(TreeNode* root) {
    if (!root) return 0;
    if (!root->left && !root->right) return 1;
    return countLeaf(root->left) + countLeaf(root->right);
}
答案:A

考点

函数与递归

解题思维

位运算:&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(右移)。异或性质:a^a=0,a^0=a。

常见错误

区分逻辑运算(&&,||,!)和位运算(&,|,~,!)。左移右移注意符号位的处理(算术右移vs逻辑右移)。负数的位运算要小心。

详细解析(节选)

【考点】二叉树遍历|递归|边界条件

1. 🎯 考纲定位:GESP 六级"二叉树遍历模块"必考题型。命题人卡住的是学生"把单分支节点误判为叶子"的惯性思维,以及递归终止条件理解偏差。

2. 🧠 解题思维:看到递归函数先定位"叶子定义"——左右子树均为空才是叶子。代码实现三步:判空(0)、判叶子(1)、合并(左右递归)。关键观察:返回值 1 仅当 !root->left && !root->right 同时成立,完美对应叶子定义。递归天然累加,叶子贡献 1,内部贡献 0,总和即叶子数。

3. 🪤 陷阱拆解:A 正确。常见掉坑点①误判单分支为叶子(条件写成 || 即翻车);②忽略空指针边界(!root 缺失会越界);③把内部节点当叶子(返回值应为 0 而非 1)。最阴险细节是 && 与 || 的视觉相似性,背结论不推敲语法必栽。

4. 🔄 反命题思维:若改题要求统计"度为 1 的节点",递归式需改为 if (root->left) return 1+countLeaf(root->left); if (root->right) return 1+countLeaf(root->right);。或把返回值改成 2,考察对递归返回值语义的敏感度。刷到类似题先问"命题人想考我什么"——是叶子判定、递归终止,还是度统计?

—— ()

同考点真题

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