You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树结构中统计指定值出现次数的代码返回时崩溃,求排查

统计二叉树指定值出现次数的代码修复

你的程序崩溃核心原因是函数存在无返回值的代码路径,导致未定义行为。以下是具体问题分析和修复方案:

问题点

  • 当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);
        }
    }
}

修复说明

  1. 给所有递归分支添加return语句,确保函数无论走哪个分支都能返回明确的整数值,彻底消除未定义行为。
  2. 将独立if改为else if结构,减少不必要的条件判断,让逻辑更清晰高效。
  3. 保留了你原本正确的逻辑:因为相等值存入右子树,所以匹配当前节点时需要继续遍历右子树统计剩余匹配次数。

内容的提问来源于stack exchange,提问作者Afonso Britto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:12:45