您的位置:首页 > 其它

LeetCode--Binary Tree Maximum Path Sum

2014-09-07 18:55 260 查看
递归,dfs

这里返回值是一个pair<int,int>,first表示两个子树的不经过当前root的最大pathsum;second表示两个子树的,以root->left和root->right为路径起始节点的路径的最大值

/**
* 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 maxPathSum(TreeNode *root) {
pair<int,int> res = dfs(root);
return res.first;
}
pair<int,int> dfs(TreeNode *root)
{
if(root == NULL)
{
return make_pair(0,0);
}
pair<int,int> left = dfs(root->left);
pair<int,int> right = dfs(root->right);
int leftCrossMax = left.first;
int rightCrossMax = right.first;

int leftMax = left.second > 0?left.second:0;
int rightMax = right.second > 0?right.second:0;

int maxNoCross = INT_MIN;
if(root->left != NULL)
{
maxNoCross = max(maxNoCross,leftCrossMax);
}
if(root->right != NULL)
{
maxNoCross = max(maxNoCross,rightCrossMax);
}
int maxCross = leftMax+rightMax+root->val;
int maxSum = max(maxCross,maxNoCross);

int child = max(leftMax,rightMax);
int maxChild = child > 0?child+root->val:root->val;
return make_pair(maxSum,maxChild);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: