class Solution {
int result = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
dfs(root);
return result;
}
public int dfs(TreeNode root){
if(root == null) return 0;
//递归的运用:要么把递归函数的值赋给某个变量,或者把值用return返回,或者定义一个全局变量,对全局变量进行操作
int left = dfs(root.left); // left是通过深度优先搜索求得的root的左子树最大路径和,下面要用
int right = dfs(root.right); // right是通过深度优先搜索求得的root的右子树最大路径和,下面要用
result = Math.max(left +root.val+right,result);//必须判断与result的大小关系后才能更新result、的值,不能直接赋值。result代表当前子树的最大路径和
int max = root.val+(left>right? left : right); //max为root及其子树能为root的父亲提供的最大路径值,max作为递归函数的返回值,但是必须大于零
return max>0? max : 0;
}
}