题意关键在于:从父结点延伸下来的路径,不能走左子树又掉头走右子树来两头收益
class Solution {
int maxRes=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
dfs(root);
return maxRes;
}
private int dfs(TreeNode root){
if(root==null) return 0;
int left =Math.max(dfs(root.left),0);
int right =Math.max(dfs(root.right),0);
//返回最终递归时得到的结果maxRes。根节点+所有左子树合起来的最优解之和+所有右子树合起来的最优解之和
maxRes = Math.max(maxRes, root.val + left+right);
//递归到末尾后,逐棵子树向上返回最优解。剪左/右枝:防止出现计算多条路径结果,不符题意
return root.val+Math.max(left,right);
}
}