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(int&height,TreeNode *root){ int l1,l2,h1,h2,l3; if(root->left!=NULL&&root->right!=NULL){ l1=maxPathSum(h1,root->left); l2=maxPathSum(h2,root->right); l3=h1+h2+root->val; height=max(max(h1,h2)+root->val,root->val); return max(max(max(l1,l2),l3),height); } else if(root->right==NULL&&root->left==NULL){ height=root->val; return root->val; } else{ if(root->left!=NULL){ l1=maxPathSum(h1,root->left); height=max(h1+root->val,root->val); return max(max(l1,height),root->val); } else{ l2=maxPathSum(h2,root->right); height=max(h2+root->val,root->val); return max(max(l2,height),root->val); } } } int maxPathSum(TreeNode *root) { // Note: The Solution object is instantiated only once and is reused by each test case. int height; if(root==NULL)return 0; return maxPathSum(height,root); } };