您的位置:首页 > 其它

LeetCode-Binary Tree Maximum Path Sum-二叉树最大路径和-DFS

2014-10-05 21:51 477 查看
https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/

求二叉树的连续路径加和的最大值。

这道题会被坑的地方就是认为结点值都大于0。需要考虑结点值小于0的情况。

考虑包含结点u的所有路径的最大值。可以看出这个最大路径有三种可能:

1)只含u自己一个结点。root->val

2)包含u和一个儿子,但不含另一个儿子的结点的路径。

3)包含u,以及他的两个结点的路径。

这个儿子上的路径可以通过返回值递归得到:它为当前包含u和其中一个儿子最大路径的和,或者只有u自己。

然后这个树上的路径就是上面三种情况的最大值,对每个结点都求个最大就能得到。

/**
* Definition for binary tree
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int res;
int DFS(TreeNode *root){
if (root==NULL){return 0;}
int l=DFS(root->left);
int r=DFS(root->right);
res=max(res,root->val);
res=max(res,l+r+root->val);
res=max(res,l+root->val);
res=max(res,r+root->val);

int curRes=root->val;
curRes=max(curRes,l+root->val);
curRes=max(curRes,r+root->val);
return curRes;
}
int maxPathSum(TreeNode *root) {
res=numeric_limits<int>::min();
DFS(root);
return res;
}
};


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: