这题试了很多次也没成功,从网上找了段代码。
这里看解说
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
int maxAcrossRoot;
public int maxPathSum(TreeNode root) {
if(root == null)
return 0;
maxAcrossRoot = Integer.MIN_VALUE;
int maxEndRoot = recur(root);
return Math.max(maxEndRoot, maxAcrossRoot);
}
public int recur(TreeNode root){
if(root == null)
return 0;
int left = recur(root.left);
int right = recur(root.right);
int currentMax = root.val;
if(left > 0)
currentMax += left;
if(right > 0)
currentMax += right;
maxAcrossRoot = Math.max(currentMax, maxAcrossRoot);
int maxEndRoot = Math.max(root.val, Math.max(root.val + left, root.val + right));
return maxEndRoot;
}
}