解题思路:
回溯
对于树的一个结点来说,[左子树值]、[右子树值]、[左子树+右子树+当前结点值],这三种组合中,必然有一个最大值,将这个最大值保存在maxValue[0]中,实时更新即可。
函数maxValue返回的是如果一定要包含当前结点值时的最大数值。
提交代码:
class Solution {
public int maxPathSum(TreeNode root) {
int[] maxValue=new int[1];
maxValue[0]=Integer.MIN_VALUE;
findMax(maxValue,root);
return maxValue[0];
}
public int findMax(int[] maxValue,TreeNode root) {
if(root==null) return Integer.MIN_VALUE;
if(root.left==null&&root.right==null) {
if(root.val>maxValue[0]) maxValue[0]=root.val;
return root.val;
}
int left=findMax(maxValue,root.left);
int right=findMax(maxValue,root.right);
int value=root.val;
if(left>0) value+=left;
if(right>0) value+=right;
if(value>maxValue[0]) maxValue[0]=value;
value=root.val;
if(left>right&&left>0) value+=left;
else if(right>=left&& right>0) value+=right;
return value;
}
}
运行结果: