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
.
- allsum代表穿过当前节点的路径(左边一支儿+自己节点+右边一支儿)。
- 注意树的节点可以是负数,所以allsum不一定是最长的。
- 每次return以root(当前节点)开头最大的单只path sum。
Solution:
private int maxHere = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
if(root == null) return 0;
maxSingleSideSum(root);
return maxHere;
}
public int maxSingleSideSum(TreeNode root) {
if(root == null) return 0;
int leftSum = maxSingleSideSum(root.left);
int rightSum = maxSingleSideSum(root.right);
// 自己,自己+左,自己+右
int childMax = Math.max(leftSum, rightSum);
int retMax = Math.max(root.val, root.val+childMax);
//自己+左+右
int allsum = root.val+leftSum+rightSum;
maxHere = Math.max(maxHere, Math.max(allsum, retMax));
return retMax;
}