链接
题目描述
思路
对每一个节点来说,全局的max
可以是这个节点左边最大值+右边最大值+这个节点的值
但是如果递归向上返回的时候,当前节点一定要参与,
因此返回的是max(左边最大值,右边最大值)+当前节点值
int max = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
if(root == null) return 0;
dfs(root);
return max;
}
private int dfs(TreeNode root){
if(root == null){
return 0;
}
int leftMax = Math.max(0,dfs(root.left));
int rightMax = Math.max(0,dfs(root.right));
max = Math.max(max,leftMax + rightMax + root.val);
return Math.max(root.val + leftMax,root.val + rightMax);
}