Medium Binary Tree Maximum Path Sum
23%
Accepted
Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree.
Example: Given the below binary tree:
1
/ \
2 3
return 6
.
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
public class Solution {
private class ResType{
private int singlePath, maxPath;
public ResType(int singlePath, int maxPath){
this.singlePath = singlePath;
this.maxPath = maxPath;
}
};
private ResType helper(TreeNode root){
if(root == null){
return new ResType(0, Integer.MIN_VALUE);
}
// divide
ResType left = helper(root.left);
ResType right = helper(root.right);
//conquer
int singlePath = Math.max(left.singlePath, right.singlePath)+root.val;
singlePath = Math.max(singlePath, 0); //very important !!!
int maxPath = Math.max(left.maxPath, right.maxPath);
maxPath = Math.max(maxPath, left.singlePath+right.singlePath+root.val);
return new ResType(singlePath, maxPath);
}
/**
* @param root: The root of binary tree.
* @return: An integer.
*/
public int maxPathSum(TreeNode root) {
// write your code here
ResType res = helper(root);
return res.maxPath;
}
}
定义两个值 singlePath 和 maxPath:
1. singlePath是从root到左子树或右子树任一node的 最大path sum, 如果singlePath是负数, 就强制设其为0,等于parent计算时不再考虑此root为根的tree的singlePath。
2. maxPath是root 树中最大的 path sum,可以不经过 root。
把这两个值放在一个返回类型类ResType内。
最大的 path sum 有两种情况:
1. 经过 root: left.singlePath + root.val + right.singlePath
2. 不经过 root: Math.max(left.maxPath, right.maxPath);