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
.
For each node like following, there shoshould be four ways existing for Max path:
1. node only
2. L-sub + Node
3. R-sub + Node
4. L-sub + node + R-sub
Note: The Return Value of the function is a large value in left + node, node, right + node. The global maximum value is the maximum value recorded before the tree with the current node as the root and (left + right + node, node, left + node, right + node.
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 int maxPathSum(TreeNode *root) {13 if (root==NULL)return 0;14 int max_sum=INT_MIN;15 pathSum(root,max_sum);16 return max_sum;17 18 }19 int pathSum(TreeNode* root, int& max_sum)20 {21 if(root==NULL)return 0;22 int sum=root->val;23 int left=pathSum(root->left,max_sum);24 sum=max(sum,sum+left);25 int right=pathSum(root->right,max_sum);26 sum=max(sum,sum+right);27 max_sum=max(sum,max_sum);28 return max(root->val,max(left+root->val,right+root->val));//important29 }30 };