Given a binary tree, find the maximum path sum.
For this problem, a path is defined as any sequence of nodes from some starting node to any node in the tree along the parent-child connections. The path does not need to go through the root.
For example: Given the below binary tree,
1
/ \
2 3
Return 6.
解题思路:
树的问题一般都能用递归的方式求解,这题也不例外。
对某个特定节点来说,有四种返回情况:
1. 返回当前节点与左子树节点和
2. 返回当前节点与右子树节点和
3. 返回当前节点(左右子树节点都为负数)
4. 返回当前节点与左、右子树节点和
用一个引用值记录和更新最大值,就能得到结果
实现代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxPathSum(TreeNode* root) {
int result(INT_MIN);
maxPathSum(root, result);
return result;
}
int maxPathSum(TreeNode* root, int &maxSum) {
if(root == NULL)
return 0;
int left = maxPathSum(root->left, maxSum);
int right = maxPathSum(root->right, maxSum);
int result(root->val);
if(left < 0)
left = 0;
if(right < 0)
right = 0;
result = max(left, right) + root->val;
maxSum = max(maxSum, root->val+left+right);
return result;
}
};