有关下面 C++ 代码不正确的说法是( )。
int Depth(BiTree T)
{
if (T == NULL)
{
return 0;
}
else
{
int m = Depth(T->lchild);
int n = Depth(T->rchild);
if (m > n)
{
return m + 1;
}
else
{
return n + 1;
}
}
}这道题考查二叉树递归求深度,核心是理解递归边界和递推关系。拿到代码先找终止条件(空树返回0),再看递推式(左右子树深度取大加1),最后用具体树形代入验证,就能发现选项B的错误。
学生容易把‘Depth’函数默认绑定到整棵树的根节点,误以为传非根节点会出错或逻辑不同。其实C++里函数参数就是指针,Depth(T)对任意节点都合法,它算的是以T为根的子树深度。另外,递归深度过大会栈溢出也是常见坑,但本题代码本身逻辑正确,只是概念理解偏差导致选错。
【考点】二叉树递归|深度计算|函数参数语义|C++指针传递
1. 考纲定位 GESP六级常考递归与二叉树深度计算,命题人特意设置‘参数适用范围’陷阱。这道题卡住的是死记硬背‘深度函数只能传根节点’的考生——C++函数参数本质是值传递,Depth(T)对任意节点均有效,非根节点调用时只会计算子树深度,不影响整体逻辑。
2. 解题思维 解题链:先看函数签名,T无类型约束,说明可传任意指针;再读递归体,无论T指向根还是中间节点,逻辑都是‘若为空则0,否则左深右深取大+1’,这恰恰是子树深度定义;最后看选项,A、C、D均符合递归深度计算通用规则,只有B限定‘非根节点不可作为参数’明显违背函数设计初衷。
3. 陷阱拆解 命题人把‘Depth只能用于整棵树’的直觉偷换成‘参数T必须为根节点’,利用考生对递归入口的特殊记忆。D项强调‘节点至少含left/right属性’是正确前提,因为代码确实只访问这两个成员;若二叉树节点缺少左/右指针,Depth访问时会崩溃,这正是D项的严谨性所在。
4. 反命题思维 若把T改为‘必须为根节点’,代码需增加父指针判断或外层循环遍历,递归逻辑不变;若考察‘高度’而非‘深度’,只需将返回值改为max(m,n)即可,命题人常借此混淆概念。刷到类似题先问:‘这个函数到底在计算谁的深度?’
5. 逐空推演 以一棵左子树深度2、右子树深度1的树为例,根节点调用Depth(root):m=Depth(root->l)=2,n=Depth(root->r)=1,max(2,1)+1=3,正确。若传左孩子节点调用Depth(root->l):m=Depth(root->ll)=1,n=Depth(root->lr)=0,max(1,0)+1=2,仍是该子树深度,逻辑自洽。因此B项‘非根节点不可以作为参数’错误,应选B。
6. 避坑提醒 别把‘深度’和‘高度’混为一谈;别以为递归只能从根开始;别忽略C++里指针参数的通用性。递归调试时,手写3~4步展开,就能看清规律。
7. 考频与趋势 函数与递归:题库共考过67题,覆盖8个考试级别(2008-2026);逐年分布:2008年2题、2013年1题、2021年1题、2023年13题、2024年18题、2025年21题、2026年6题、null年5题;分赛事:GESP四级26题、GESP五级19题、GESP六级8题、GESP三级5题、GESP七级3题、NOIP提高组初赛3题、CSP提高级2题、GESP二级1题。递归函数:题库共考过115题,覆盖8个考试级别(2007-2026);逐年分布:2007年4题、2008年4题、2009年2题、2010年2题、2012年2题、2013年3题、2014年1题、2019年2题、2020年1题、2021年5题、2022年2题、2023年7题、2024年25题、2025年15题、2026年18题、null年22题;分赛事:GESP五级35题、CSP入门级32题、GESP六级12题、NOIP提高组初赛10题、CSP提高级9题、NOIP普及组初赛8题、GESP七级7题、GESP八级2题。二叉树基础:题库共考过220题,覆盖8个考试级别(2008-2026);逐年分布:2008年2题、2009年2题、2010年4题、2011年3题、2012年1题、2013年3题、2014年1题、2015年4题、2016年3题、2019年3题、2020年1题、2021年4题、2022年2题、2023年20题、2024年60题、2025年67题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、NOIP普及组初赛14题、NOIP提高组初赛9题、CSP提高级8题、CSP入门级8题、GESP五级6题。二叉树的遍历:题库共考过201题,覆盖8个考试级别(2007-2026);逐年分布:2007年2题、2008年2题、2010年2题、2011年2题、2012年2题、2013年1题、2015年2题、2019年1题、2021年2题、2022年1题、2023年19题、2024年58题、2025年67题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、NOIP提高组初赛9题、GESP五级6题、NOIP普及组初赛4题、CSP提高级4题、CSP入门级3题。二叉树应用:题库共考过185题,覆盖5个考试级别(2009-2026);逐年分布:2009年1题、2010年3题、2023年18题、2024年57题、2025年66题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、GESP五级6题、NOIP普及组初赛4题。二叉搜索树(BST):题库共考过183题,覆盖6个考试级别(2013-2026);逐年分布:2013年1题、2023年18题、2024年57题、2025年67题、2026年28题、null年12题;分赛事:GESP六级100题、GESP七级56题、GESP八级19题、GESP五级6题、CSP提高级1题、NOIP提高组初赛1题。算法:题库共考过7题,覆盖4个考试级别(2010-2025);逐年分布:2010年1题、2013年1题、2023年2题、2024年2题、2025年1题;分赛事:CSP入门级4题、NOIP普及组初赛1题、CSP提高级1题、NOIP提高组初赛1题。
8. 预测 基于上述数据,递归与二叉树深度计算在GESP六级、NOIP普及组/提高组初赛、CSP入门/提高级中高频出现,2024-2025年题量显著上升,2026年仍保持高位。未来考题可能继续侧重‘参数语义’‘递归边界’‘高度vs深度’等概念辨析,也可能结合遍历(层序/先序)设计复合递归场景。暂无足够依据预测具体变体形式。