一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 351|回复: 2
收起左侧

[编程题] 写Binary Tree Maximum Path Sum遇到的神奇问题

[复制链接] |试试Instant~ |关注本帖
会编程的猪先生 发表于 2015-7-10 16:25:48 | 显示全部楼层 |阅读模式

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
做这道题的时候,我的原来版本是:
public class Solution {
    int max = Integer.MIN_VALUE;
    public int maxPathSum(TreeNode root) {
        max = Math.max(max, maxSumFromRoot(root));
        return max;
    }

    public int maxSumFromRoot(TreeNode root){
        if(root==null) return 0;
        int maxLeft = maxSumFromRoot(root.left);
        int maxRight = maxSumFromRoot(root.right);
        int sum = 0;
        if(maxLeft>maxRight){
            sum = maxLeft>0?root.val+maxLeft:root.val;
        }else{
            sum = maxRight>0?root.val+maxRight:root.val;
        }
        max = Math.max(max, sum);
        max = Math.max(max, maxLeft+maxRight+root.val);
        return sum;
    }
}
然后发现在输入是{-2,1}时返回值是-1.
而我把第四行max = Math.max(max, maxSumFromRoot(root));换成
int temp = maxSumFromRoot(root);

        max = Math.max(max, temp);
却得AC通过了!!!
这是为什么?难道他们不是一样的吗!

Tsien 发表于 2015-7-10 19:14:00 | 显示全部楼层
改成max = Math.max(maxSumFromRoot(root), max);
或者是
        int temp = Math.max(max, maxSumFromRoot(root));
        max = Math.max(max, temp);

调用maxSumFromRoot时修改了max的值
回复 支持 反对

使用道具 举报

 楼主| 会编程的猪先生 发表于 2015-7-11 12:22:43 | 显示全部楼层
Tsien 发表于 2015-7-10 19:14
改成max = Math.max(maxSumFromRoot(root), max);
或者是
        int temp = Math.max(max, maxSumFromR ...

明白了!!!Math.max(左,右),执行的时候左边还是我没更新过的max, 当然没法得到正确解! 多谢!!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2016-12-8 20:40

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表