sumAtBis代码计算树指定深度和出错,请求问题排查
解决二叉树指定深度节点和计算时的空指针访问崩溃问题
问题根源
退出码3221225477对应Windows平台的空指针访问违规。你的sumAtBis函数未处理递归过程中当前节点为空的情况:当递归到空节点(比如叶子节点的子节点)但未到达目标深度n时,代码会直接调用left(a)或right(a),而这两个函数会访问空指针的成员(a->left/a->right),直接触发内存访问错误。
修复方案
在sumAtBis函数开头增加空节点判断,只要当前节点为空,直接返回0,无需继续递归:
int sumAtBis(tree a, int n, int i){ // 新增:空节点直接返回0,避免后续空指针访问 if(isEmpty(a)) return 0; if(i==n){ return root(a); } return sumAtBis(left(a),n,i+1)+sumAtBis(right(a),n,i+1); }
修复验证
你的测试用例中,目标深度3的节点是f和g,值分别为1和-1,求和结果为0。修复后运行代码,printf会正确输出0,不再出现崩溃。
额外说明
- 原代码中
testSumAtBis和testSumAt函数逻辑混乱,和核心功能无关,若无需测试可直接删除。 - 递归过程中务必优先处理空指针边界情况,避免非法内存访问。
内容的提问来源于stack exchange,提问作者AMIS7
相关产品推荐
相关产品推荐

