题目:
Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
不太明白什么意思!不会做!!!
http://www.programcreek.com/2013/02/leetcode-binary-tree-maximum-path-sum-java/
1) Recursively solve this problem
2) Get largest left sum and right sum
2) Compare to the stored maximum
参考代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxPathSum(TreeNode root) {
int max[] = new int[1];
max[0] = Integer.MIN_VALUE;
calculateSum(root, max);
return max[0];
}
public int calculateSum(TreeNode root, int[] max) {
if (root == null)
return 0;
int left = calculateSum(root.left, max);
int right = calculateSum(root.right, max);
int current = Math.max(root.val, Math.max(root.val + left, root.val + right));
max[0] = Math.max(max[0], Math.max(current, left + root.val + right));
return current;
}
}
版本2:
http://blog.csdn.net/linhuanmars/article/details/22969069
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int maxPathSum(TreeNode root) {
if(root==null)
return 0;
ArrayList<Integer> res = new ArrayList<Integer>();
res.add(Integer.MIN_VALUE);
helper(root,res);
return res.get(0);
}
private int helper(TreeNode root, ArrayList<Integer> res)
{
if(root == null)
return 0;
int left = helper(root.left, res);
int right = helper(root.right, res);
int cur = root.val + (left>0?left:0)+(right>0?right:0);
if(cur>res.get(0))
res.set(0,cur);
return root.val+Math.max(left, Math.max(right,0));
}
}