树结构中统计指定值出现次数的代码返回时崩溃,求排查
统计二叉树指定值出现次数的代码修复
你的程序崩溃核心原因是函数存在无返回值的代码路径,导致未定义行为。以下是具体问题分析和修复方案:
问题点
- 当
valor < arvore->info或valor > arvore->info时,你仅调用了递归函数conta,但没有返回它的结果。函数执行到这些分支末尾时没有返回值,栈中的返回数据是随机的,会直接引发程序崩溃或结果异常。 - 多个独立
if判断存在冗余:当当前节点值等于目标值时,后续的大小判断仍会执行,虽然不影响结果,但逻辑不够严谨。
修复后的代码
int conta(pNodo *arvore, int valor) { if (arvore == NULL) { return 0; } else { if (arvore->info == valor) { // 相等值存入右子树,统计当前节点+右子树的匹配次数 return conta(arvore->dir, valor) + 1; } else if (valor < arvore->info) { // 目标值更小,递归左子树并返回结果 return conta(arvore->esq, valor); } else { // 目标值更大,递归右子树并返回结果 return conta(arvore->dir, valor); } } }
修复说明
- 给所有递归分支添加
return语句,确保函数无论走哪个分支都能返回明确的整数值,彻底消除未定义行为。 - 将独立
if改为else if结构,减少不必要的条件判断,让逻辑更清晰高效。 - 保留了你原本正确的逻辑:因为相等值存入右子树,所以匹配当前节点时需要继续遍历右子树统计剩余匹配次数。
内容的提问来源于stack exchange,提问作者Afonso Britto
相关产品推荐
相关产品推荐

