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

 

转载于:https://www.cnblogs.com/vaecn/p/5303842.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值