题目链接:https://leetcode.com/problems/binary-tree-maximum-path-sum/
Given a non-empty binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path must contain at least one nodeand does not need to go through the root.
Example 1:
Input: [1,2,3] 1 / \ 2 3 Output: 6
Example 2:
Input: [-10,9,20,null,null,15,7] -10 / \ 9 20 / \ 15 7 Output: 42
思路:
递归实现,比较简单,不过有一个易出错的点,辅助函数的返回值
应该是(root.val,root.val+L,root.val+R)中的最大的一个,而不应该包括root.val+L+R。
root.val+L+R在计算全局最大时才需要。
AC 1ms 99.6% Java:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int ans=Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
helper(root);
return ans;
}
public int helper(TreeNode root){
if(root==null)
return 0;
int L=helper(root.left);
int R=helper(root.right);
int localMax=Math.max(root.val,Math.max(root.val+L,Math.max(root.val+R,root.val+L+R)));
ans=Math.max(ans,localMax);
int sum=Math.max(root.val,Math.max(L,R)+root.val);
return sum;
}
}