Binary Tree Maximum Path Sum (LeetCode)

来源:互联网 发布:push 数组 编辑:程序博客网 时间:2024/06/06 17:35

Given a binary tree, find the maximum path sum.

The path may start and end at any node in the tree.

For example:
Given the below binary tree,

       1      / \     2   3

Return 6.

这题思路有点类似于maximum subarray,需要一个max变量来更新所能取得的最大和,采用bottom up的遍历方法,每到一个新节点,计算当前节点所能取得的sum,然后和max作比较,如果sum>max,则max=sum,然后把所能取得的最大值传递到上一层。

有一个地方要注意,如果left>0 && right>0,这时候的return value不能为(left+right+root.val),因为这样一来就不是一条single path了,必须取max(left,right)+root.val来返回

int max = Integer.MIN_VALUE;    public int maxPathSum(TreeNode root) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        return Math.max(maxHelper(root),max);    }        public int maxHelper(TreeNode root){        if(root==null)            return 0;        int sum=0, returnVal =0;        int left = maxHelper(root.left);        int right = maxHelper(root.right);        if(left>0 && right>0){            sum = left+right+root.val;            returnVal = Math.max(left,right)+root.val;        }        else if(left<0 && right<0){            sum = root.val;            returnVal=root.val;        }        else{            sum = Math.max(left,right)+root.val;            returnVal = Math.max(left,right)+root.val;        }        max = Math.max(max,sum);        return returnVal;    }


0 0
原创粉丝点击