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注意特殊情况:左右路径为负的情况,只能选择根节点的值
public class Solution {
private int max;
public int dfs(TreeNode p){
if(p == null) return 0;
int left = dfs(p.left);
int right = dfs(p.right);
int sum = p.val;
if(left > 0)
sum += left;
if(right > 0)
sum += right;
max = Math.max(sum , max);
return p.val + (Math.max(left, right)>0 ? Math.max(left, right) : 0);
}
public int maxPathSum(TreeNode root) {
max = Integer.MIN_VALUE;
dfs(root);
return max;
}
}