您的位置:首页 > 职场人生

[LeetCode] Binary Tree Maximum Path Sum

2014-01-17 08:18 197 查看
问题:

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
.
分析:
首先,这道题的解决方案是用递归。对于一棵树来说,maximum path可能是经过root、贯穿左右的一条path;有可能是一条经过root但不贯穿的path(只有左边或者只有右边);也由可能是一条只在一边的path。但值得注意的是,如果是一条贯穿左右的path,则在我们recurse on left subtree and right subtree的时候,一定要选择第二种情况,即经过root但不管穿的path,把他们组合起来才变成一条贯穿的。所以,代码如下。

代码:

class Solution {
public:
int maxPathSumHelper(TreeNode *root, int &result) {
if (!root)
return 0;
int l = maxPathSumHelper(root->left, result);
int r = maxPathSumHelper(root->right, result);
int arch = l + r + root->val;
int single = max(root->val, max(l + r) + root->val);
result = max(result, max(arch, single));
return single;
}

int maxPathSum(TreeNode *root) {
int result = INT_MIN;
if (!root) return 0;
maxPathSumHelper(root, result);
return result;
}
};

注意,maxPathSumHelper返回的是single。这就是我上面说的原因:因为我们要用这个返回值来组合一条arch,所以必须是single。但也不用担心,因为我们早在上一行就已经把max放在了result里面,所以没关系。这个递归稍稍不同于一般的递归:它的返回值和我们真正要的东西不是用一个东西。这里的返回值是用来进一步递归的,而不是真正我们需要返回的东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 算法 面试