设两个变量 一个保存经当前节点到根节点时的路径最大值,一个保存由当前节点作为根节点时经过此节点的路径最大值
public class BinaryTreeMaximumPathSum {
public int childmax = -99999;// path not to father-node include itself
public int maxSum(TreeNode root) {
int maxsum = 0;// path to father-node include itself
if (root == null)
return -99999;
int leftsum = maxSum(root.left);
int rightsum = maxSum(root.right);
if (leftsum > rightsum)
maxsum = leftsum;
else
maxsum = rightsum;
if (maxsum < 0)
maxsum = 0;
maxsum = maxsum + root.val;
if (leftsum + rightsum + root.val > this.childmax)
this.childmax = leftsum + rightsum + root.val;
if (maxsum > this.childmax)
this.childmax = maxsum;
return maxsum;
}
public int maxPathSum(TreeNode root) {
maxSum(root);
return this.childmax;
}
public static void main(String[] args) {
TreeNode root = new TreeNode(-2);
root.left = new TreeNode(1);
// root.right = new TreeNode(-3);
// root.left.left = new TreeNode(1);
// root.left.right = new TreeNode(3);
// root.right.left = new TreeNode(-2);
BinaryTreeMaximumPathSum test = new BinaryTreeMaximumPathSum();
test.maxPathSum(root);
System.out.println(test.childmax);
}
}