/**
* very elegant code from discuss
* Runtime: 0 ms, faster than 100.00%
* Memory Usage: 40.6 MB, less than 74.38%
*/
class Solution {
int max = Integer.MIN_VALUE; // 更新以每个节点为根节点的子树的最大pathSum
public int maxPathSum(TreeNode root) {
helper(root);
return max;
}
private int helper(TreeNode root) {
if (root == null) {
return 0;
}
int left = Math.max(0, helper(root.left));
int right = Math.max(0, helper(root.right));
max = Math.max(max, root.val + left + right); // 按照当前节点为根节点更新max,每一个节点作为根结点的情况都会被比较,所以能找到最大路径
return root.val + Math.max(left, right); // 为父节点提供当前节点为子树根节点的子树最大路径和
}
}