LeetCode124. Binary Tree Maximum Path Sum
找出二叉树任意一点到另一点的路径,使得和最大.
解题思路:后序遍历,先计算左右子树的值l和r,若l<0或r<0,则不用加上
1 / \ 2 3
最大为6
4 / \ 2 6 / \ / \ 1 3 5 7
最大从3到7:4 + 5 + 13 = 22
public class Solution {
int maxsum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
if(root == null)
return 0;
maxSum(root);
return maxsum;
}
public int maxSum(TreeNode root) {
if(root == null) return 0;
/*求以root为根的当前子树的最大路径和*/
int cur = root.val;
int lmax = maxSum(root.left);
int rmax = maxSum(root.right);
if(lmax > 0)
cur += lmax;
if(rmax > 0)
cur += rmax;
if(cur > maxsum)
maxsum = cur;
/*返回以当前root为根的子树的最大路径和*/
return Math.max(root.val,Math.max(root.val + lmax, root.val + rmax));
}
}