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

二叉树递归min函数疑问:最小值如何返回至main函数?

为啥你的最小值返回逻辑有问题?

兄弟,我太懂你的疑惑了——你这段代码看似能跑,但其实藏着未定义行为的bug,现在的“正常运行”完全是巧合!

先拆解下你的代码问题:
你写的min函数里,最后一个else分支调用了min(root->left),但没有把这个递归调用的结果return出去!

具体执行流程(拿你给的二叉树举例)

你的二叉树按二叉搜索树构建的话,左子链是17 → 14 → 12(12的右是13),右子链是17→19→18、20→21,理论最小值是12。

  • 第一次调用min(17):进入else分支,调用min(14)
  • 第二次调用min(14):进入else分支,调用min(12)
  • 第三次调用min(12):它的left是NULL,所以return 12给上一层的min(14)
  • 重点来了:min(14)拿到了12这个返回值,但它没有把这个值return出去,执行完min(root->left)就结束了。这时候C++会返回一个随机的垃圾值!
  • 同理,min(17)也会返回一个垃圾值给main函数——你觉得结果对,只是刚好这个垃圾值和12巧合相同而已,换个环境或者树结构,结果肯定会错。

修正后的代码

只需要在最后一个else分支加上return,把递归结果逐层传递回去:

struct Node { int data; Node* left; Node* right; };

int min(Node* root) {
    if(root == NULL) {
        // 这里提个小建议:空树没有最小值,返回0容易混淆(如果树里有0的话)
        // 可以考虑抛出异常或者用std::optional<int>(C++17及以上)来处理
        return 0;
    }
    else if(root->left == NULL) {
        return root->data;
    }
    else {
        // 关键:把递归调用的结果return给上层
        return min(root->left);
    }
}

这样修改后,每次递归调用都会把下层返回的最小值往上传递,最终正确回到main函数里。

内容的提问来源于stack exchange,提问作者Naruto Uzumaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:04:43