鏈接:https://oj.leetcode.com/problems/binary-tree-maximum-path-sum/
描述:
Given a binary tree, find the maximum path sum.
The path may start and end at any node in the tree.
For example:
Given the below binary tree,
1 / \ 2 3
Return 6
.
解法:
遞歸求解,
每一個遞歸返回兩個值,一個值是以該節點爲根的樹中的最大和,另一個值是一該節點爲某一起始點的最大路徑。
此題思路需要十分清晰,容易出錯。另注意樹中含有負數的情況。
代碼如下:
int maxPathSum(TreeNode *root) {
if(root == NULL) return 0;
if(root->left == NULL && root->right == NULL) return root->val;
int result = 0;
maxSum(root, result);
return result;
}
int maxSum(TreeNode* root, int &maxsum)
{
if( root == NULL) {
maxsum = INT_MIN;
return 0;
}
int leftsum = INT_MIN, rightsum = INT_MIN;
int left = maxSum(root->left, leftsum);
int right = maxSum(root->right, rightsum);
int sum = root->val;
if( left > 0)
sum += left;
if(right > 0)
sum += right;
maxsum = max(leftsum, rightsum);
maxsum = max(maxsum, sum);
return max(left, right) > 0 ? max(left, right) + root->val : root->val;;
}