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) {} * }; */ struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; class Solution { public: int maxPathSum(TreeNode *root) { if(root == NULL) return 0; maxNode = root->val; dfs(root); return maxNode; } private: int maxNode; int dfs(TreeNode *root) { if(root == NULL) return 0; int left = dfs(root->left); int right= dfs(root->right); int val = root->val; if(left > 0) val += left; if(right> 0) val += right; if(maxNode < val) maxNode = val; return std::max(std::max(left,right),0) + root->val; } };