题目链接:binary-tree-maximum-path-sum
/**
*
* 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.
*
*/
public class BinaryTreeMaximumPathSum {
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
// 92 / 92 test cases passed.
// Status: Accepted
// Runtime: 338 ms
// Submitted: 0 minutes ago
//时间复杂度O(n),空间复杂度O(log n)
public int max_sum = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
dfs(root);
return max_sum;
}
public int dfs(TreeNode root) {
int sum = root.val;
int left_sum = 0;
int right_sum = 0;
if (root.left != null) {
left_sum = dfs(root.left);
if (left_sum > 0)
sum += left_sum;
}
if (root.right != null) {
right_sum = dfs(root.right);
if (right_sum > 0)
sum += right_sum;
}
// 比较(L-> root -> R)的值和max_sum的值
max_sum = Math.max(sum, max_sum);
//如果左右边的路径和的值都大于0,则只返回一个方向的值,即 L-> root 或 root -> R 路径
if (left_sum > 0 && right_sum > 0) {
return sum - ((left_sum < right_sum) ? left_sum : right_sum);
}
return sum;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}