LC124 Binary Tree Maximum Path Sum

这道题一开始就没什么明确的正确想法,大致想着把树深度遍历,然后在遍历路径的上做文章,找到两条路径,这两条路径分别是树中部分结点相加之和第一大和第二大的路径。对这两条路径的头结点找最近公共祖先,然后看看这两条路径相连起来会不会是一个更大的和。找每条路径的基本思路来自求一个数组子数组的最大和题目。但最终感觉这么做下去太复杂了,也未必正确。

正确思路是,从下往上找,然后用一个数记录当前最大和。

 1 class Solution {
 2 public:
 3     int sum;
 4     int DFS(TreeNode* root)
 5     {
 6         int left=0,right=0,val=root->val;
 7         if(root->left!=NULL)
 8             left=DFS(root->left);
 9         if(root->right!=NULL)
10             right=DFS(root->right);
11         if(left>0)
12             val+=left;
13         if(right>0)
14             val+=right;
15         if(val>sum)
16             sum=val;
17         return max(root->val,max(root->val+left,root->val+right));
18     }
19     int maxPathSum(TreeNode* root) {
20         sum=root->val;
21         DFS(root);
22         return sum;
23     }
24 };
View Code

 

posted @ 2016-03-21 21:28  vaevaevae  阅读(163)  评论(0编辑  收藏  举报