题目描述
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
Return6.
AC代码
struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
int ma;
public:
int maxPathSum(TreeNode *root) {
ma = 0x80000000;
int res = search(root);
res = max(res, ma);
return res;
}
int search(TreeNode* root) {
if(root == NULL) {
return 0;
}
int lh = search(root->left);
int rh = search(root->right);
int lst = max(lh, rh);
//三种情况:1.包含一个子树和顶点,2.仅包含顶点,3.包含左子树和右子树以及顶点。
int sum = lh + rh + root->val;//情况3
sum = max(sum, root->val);//情况2
sum = max(sum, lst + root->val);//情况1
//取最大值
if(sum > ma) {
ma = sum;
}
//对于每一个子树,返回包含该子树顶点的深度方向的路径和的最大值。
int rt = lst + root->val;
rt = max(rt, root->val);
return rt;
}
};