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

如何修改二叉树求最大值代码 仅统计叶子节点的最大值

修改思路

原代码会将所有节点的值纳入比较,所以返回的是整棵树的最大值。要实现仅对比叶子节点的需求,核心是新增叶子节点判断逻辑:左右子节点都为NULL的节点才是叶子节点,只有这类节点的值需要参与最大值比较,非叶子节点仅负责传递左右子树的叶子最大值,自身值不纳入计算。

调整后代码(两种实现可选)

写法1:使用INT_MIN做初始值

需提前引入<limits.h>头文件使用INT_MIN常量:

int max_val(node *head){
    // 当前节点是叶子节点,直接返回自身值
    if (head->left == NULL && head->right == NULL) {
        return head->val;
    }
    int max = INT_MIN;
    if (head->left != NULL) {
        int leftmax = max_val(head->left);
        max = max > leftmax ? max : leftmax;
    }
    if (head->right != NULL) {
        int rightmax = max_val(head->right);
        max = max > rightmax ? max : rightmax;
    }
    return max;
}

写法2:无需引入额外头文件

通过分支判断避免初始值问题,兼容性更强:

int max_val(node *head){
    // 当前节点是叶子节点,直接返回自身值
    if (head->left == NULL && head->right == NULL) {
        return head->val;
    }
    // 仅存在右子树,直接返回右子树的叶子最大值
    if (head->left == NULL) {
        return max_val(head->right);
    }
    // 仅存在左子树,直接返回左子树的叶子最大值
    if (head->right == NULL) {
        return max_val(head->left);
    }
    // 左右子树都存在,比较两者的叶子最大值返回
    int leftmax = max_val(head->left);
    int rightmax = max_val(head->right);
    return leftmax > rightmax ? leftmax : rightmax;
}

验证说明

对应你给出的二叉树:

  • 叶子节点2、3、4、6满足判断条件,直接返回自身值
  • 非叶子节点7对比左右返回的2和3,返回3
  • 非叶子节点8对比左右返回的4和6,返回6
  • 根节点3对比左右返回的3和6,最终返回6,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:06:03