/*************************************************************************
> File Name: BinaryTreeMaximumPathSum.cpp
> Author: Shaojie Kang
> Mail: kangshaojie@ict.ac.cn
> Created Time: 2015年09月16日 星期三 16时06分51秒
> Problem:
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
Have you met this question in a real interview? Yes
Example
Given the below binary tree:
1
/ \
2 3
return 6.
> Solution:
divide and conquer
************************************************************************/
#include<iostream>
#include<limits.h>
using namespace std;
class TreeNode
{
public:
int val;
TreeNode *left, *right;
TreeNode(int val)
{
this->val = val;
this->left = this->right = NULL;
}
};
class Solution
{
public:
int maxPathSum(TreeNode *root)
{
int maxSum = INT_MIN;
maxPathSumCore(root, maxSum);
return maxSum;
}
int maxPathSumCore(TreeNode *root, int &maxSum)
{
if(root == NULL) return 0;
int sum = root->val;
int leftSum = maxPathSumCore(root->left, maxSum);
int rightSum = maxPathSumCore(root->right, maxSum);
if(leftSum > 0) sum += leftSum;
if(rightSum > 0) sum += rightSum;
if(sum > maxSum) maxSum = sum;
return max(leftSum, rightSum) > 0 ? root->val + max(leftSum, rightSum) : root->val;
}
};
「分治法」Binary Tree Maximum Path Sum
最新推荐文章于 2020-05-05 17:42:48 发布