路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。
路径和 是路径中各节点值的总和。
给你一个二叉树的根节点 root ,返回其 最大路径和 。
二叉树问题,考虑的是局部
class Solution {
//全局变量维护 曾经走过的路径的最大路径和
int ans = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
oneSideMax(root);
return ans;
}
private int oneSideMax(TreeNode root){
//递归终止条件:root == null
if (root == null){
return 0;
}
//求出 root 左边的最大路径和
int left = Math.max(0, oneSideMax(root.left));
//求出 root 左边的最大路径和
int right = Math.max(0, oneSideMax(root.right));
//更新 ans 的值
ans = Math.max(ans, left + right + root.val);
//向上返回
return Math.max(left , right) + root.val;
}
}



