Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1
/ \
2 3
Return 6
.
思路:dfs是返回包含当前node的最大值,global是可以穿过node的最大值;DFS返回的是包含当前点的最大值,res收集的是全局最大,也就是包含穿过root的sum的最大值。
犯错点:没有用res[] 来收集,全局变量容易出错;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int maxPathSum(TreeNode root) {
int[] res = new int[]{Integer.MIN_VALUE};
dfs(root, res);
return res[0];
}
private int dfs(TreeNode root, int[] res) {
if(root == null) {
return 0;
}
int leftPathSum = dfs(root.left, res);
int rightPathSum = dfs(root.right, res);
int localmax = Math.max(root.val, Math.max(leftPathSum, rightPathSum) + root.val);
res[0] = Math.max(res[0], Math.max(localmax, leftPathSum + rightPathSum + root.val));
return localmax;
}
}