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.
/** * Definition for binary tree * 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 &depthsum) { if(root == NULL)return 0; if(root->left == NULL && root->right == NULL) {depthsum = root->val; return root->val;} int maxsum = 0xC0000000; int left = 0, lefthalf = 0; if(root->left) left = maxpathsum(root->left, lefthalf); else {left = 0xC0000000; lefthalf = 0xC0000000;} int right = 0, righthalf = 0; if(root->right) right = maxpathsum(root->right, righthalf); else {right = 0xC0000000; righthalf = 0xC0000000;} maxsum = lefthalf + root->val + righthalf; maxsum = left > maxsum ? left : maxsum; maxsum = right > maxsum ? right : maxsum; lefthalf = lefthalf > righthalf ? lefthalf : righthalf; depthsum = lefthalf + root->val > root->val ? lefthalf+root->val : root->val; maxsum = maxsum > depthsum ? maxsum : depthsum; maxsum = maxsum > root->val ? maxsum : root->val; return maxsum; } int maxPathSum(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function if(root == NULL)return 0; int maxsum = 0; int depthsum = 0; maxsum = maxpathsum(root, depthsum); maxsum = depthsum > maxsum ? depthsum : maxsum; return maxsum; } };