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) { if(root==NULL) return 0; set<int> s; return recursion(root,root,s); } private: int recursion(TreeNode *p,TreeNode *root,set<int> &s){ int left = 0 ,right=0 ,parent = p->val; int max = p->val; if(p->left==NULL && p->right==NULL) return max; if(p->left) left = recursion(p->left,root,s); if(p->right) right = recursion(p->right,root,s); if(left>max && p->left) s.insert(left); if(right>max && p->right) s.insert(right); if(left+parent>max) max = left+parent; if(right+parent>max) max = right+parent; if(right+left+parent>max) s.insert(right+left+parent); if(p==root && !s.empty()){ set<int>::iterator iter = s.end(); iter--; return (max>(*iter)?max:(*iter)); } return max; } };
[LeetCode] Binary Tree Maximum Path Sum(递归)
时间: 2024-10-18 23:21:57