码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]Binary Tree Maximum Path Sum

时间:2014-07-22 23:07:34      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:io   for   re   c   代码   时间   

/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
/*
这里的node_max_sum要注意,它的返回值不是以传入的参数root为根的子树的max path sum!
而是指从root出发的路径的最大和,明白这一点很重要,否则这个代码写不出来。。别人也看不懂。
明确这一点之后,接着来分析,可以设置一个最大值的引用,在每次递归中判断更新最大值,也可以直接定义一个全局变量。
总之,记这个值为max_path_sum。
在获得从root->left和root->right出发的路径的max sum(记为left_sum和right_sum)之后,函数的返回值应该是:
root->val,left_sum, right_sum之中的最大值。
然后,由于题目要求求树中所有路径的最大和,所以要考虑路径经过root的情况,所以需要把max_path_sum和left_sum+right_sum+root->val的值,以及从root出发的路径的sum最大值相比较,将max_path_sum更新为这些值中的最大值。
此题折磨了我很长时间。。需要仔细体会。

所谓的最大和,就是从根节点出发的路径以及经过根节点的路径的和的最大值,再与之前求得的除根节点加入之前的最大值相比,较大的那个,
就是所要求的那个最大和,这是本题的基本思路。


*/
int max_path_sum = INT_MIN;
int node_max_sum(TreeNode *root)
{
if (root == NULL)
{
return 0;
}

int left_sum = node_max_sum(root->left);
int right_sum = node_max_sum(root->right);

int tmp = max(root->val, max(left_sum+(root->val), right_sum+(root->val)));
int tmp1 = max(root->val+left_sum+right_sum, tmp);

max_path_sum = max(max_path_sum, tmp1);

return tmp;
}

int maxPathSum(TreeNode *root) {
if (root == NULL)
return 0;

//int max_path_sum = INT_MIN;
node_max_sum(root);

return max_path_sum;
}
};

[leetcode]Binary Tree Maximum Path Sum,码迷,mamicode.com

[leetcode]Binary Tree Maximum Path Sum

标签:io   for   re   c   代码   时间   

原文地址:http://www.cnblogs.com/andy071001/p/3700491.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!