您的位置:首页 > 其它

【Leetcode】Binary Tree Maximum Path (Sum)

2014-10-31 11:19 330 查看
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
.

一个和为最大的路径一定是自己的值+左子树的返回值(如果大于0)+右子树的返回值。(如果大于0)
而返回值则是(自己的值+左子树的返回值)或者(自己的值+右子树的返回值)
如果左右子树都大于0,取最大一边即可
如果左右子树都小于0,取0
如果左右子树有一个大于0,取大于0的一边
Math.max(Math.max(left,0), Math.max(right,0))

public int maxPathSum(TreeNode root) {
if(root==null)
return 0;
ArrayList<Integer> result = new ArrayList<Integer>();
result.add(Integer.MIN_VALUE);
helper(root, result);
return result.get(0);
}
public int helper(TreeNode root, ArrayList<Integer> result) {
if(root==null)
return 0;
int left=helper(root.left, result);
int right=helper(root.right, result);
int cur=root.val+(left>0?left:0)+(right>0?right:0);
if(cur>result.get(0))
result.set(0, cur);
return root.val+Math.max(Math.max(left, 0), Math.max(right, 0));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: