题目:https://oj.leetcode.com/problems/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
.
采用DFS 来进行遍历Binary Tree。先算出左右子树的结果L和R,如果L大于0,那么对后续结果是有利的,我们加上L,如果R大于0,对后续结果也是有利的,继续加上R。
源码:Java版本
算法分析:时间复杂度O(n),空间复杂度O(logn)。
/**
* Definition for binary tree
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private int maxValue = Integer.MIN_VALUE;
public int maxPathSum(TreeNode root) {
DFS(root);
return maxValue;
}
public int DFS(TreeNode node) {
if (node == null) {
return 0;
}
int leftValue = DFS(node.left);
int rightValue = DFS(node.right);
int value = node.val;
if (leftValue > 0) {
value += leftValue;
}
if (rightValue > 0) {
value += rightValue;
}
if (value > maxValue) {
maxValue = value;
}
return Math.max(leftValue, rightValue) > 0 ? Math.max(leftValue,
rightValue)
+ node.val : node.val;
}
}
注意,最后return 的时候,只返回一个方向上的值,为什么?这是因为在递归中,只能向父节点返回,不可能存在L->root->R 的路径,只可能是L->root 或R->root。