讨论社区

有不符合测试用例的代码提交也通过了

124题二叉树中的最大路径和

我的代码如下:

    

    int max = Integer.MIN_VALUE;

        

    public int maxPathSum(TreeNode root) {

        max(root);

        return max;

    }

    

    private int max(TreeNode root){

        if(root == null)

            return 0;

        int left = max(root.left);

        int right = max(root.right);

        if(left > 0 && right > 0){

            max = Math.max(max, left + right + root.val);

        }else if(left > 0){

            max = Math.max(max, Math.max(left, left + root.val));

        }else if(right > 0){

            max = Math.max(max, Math.max(right, right + root.val));

        }else{

           if(root.val >= 0 || left == 0 && right == 0){

                max = Math.max(max, root.val);

            }else if(left == 0){

                max = Math.max(max,Math.max(root.val, right));

            }else if(right == 0){

                max = Math.max(max,Math.max(root.val, left));

            }else{

                max = Math.max(max,Math.max(left,right));//有bug

                //max = Math.max(max,Math.max(root.val, Math.max(left,right)));

            }

        }

        return Math.max(root.val, Math.max(left + root.val,right + root.val));

    }   


测试用例[-1,-2,-3],执行代码的话我的答案是-2,正确答案应该是-1,执行代码却显示通过,这应该是有bug了吗?

虽然我用了个全局变量,保存的是最大的长度路径,但和这个应该没关系吧。。。


下面是我的正确代码,改了后面的一行代码

    

    int max = Integer.MIN_VALUE;

        

    public int maxPathSum(TreeNode root) {

        max(root);

        return max;

    }

    

    private int max(TreeNode root){

        if(root == null)

            return 0;

        int left = max(root.left);

        int right = max(root.right);

        if(left > 0 && right > 0){

            max = Math.max(max, left + right + root.val);

        }else if(left > 0){

            max = Math.max(max, Math.max(left, left + root.val));

        }else if(right > 0){

            max = Math.max(max, Math.max(right, right + root.val));

        }else{

           if(root.val >= 0 || left == 0 && right == 0){

                max = Math.max(max, root.val);

            }else if(left == 0){

                max = Math.max(max,Math.max(root.val, right));

            }else if(right == 0){

                max = Math.max(max,Math.max(root.val, left));

            }else{

                //max = Math.max(max,Math.max(left,right));//有bug

                max = Math.max(max,Math.max(root.val, Math.max(left,right)));

            }

        }

        return Math.max(root.val, Math.max(left + root.val,right + root.val));

    }   


0 人关注了该问题 关注

0

776854974m • 5天前

非常感谢您的反馈,此问题已转给相关技术团队后期会持续优化,给您带来的不便敬请谅解,感谢您对力扣的支持。

0 个讨论

您需要登录后才可回复
您需要登录后才可以回复