题意:找到一棵树中,各结点值和最大的路径。
思路:DFS, 返回必须经过该结点的路径的最大值和可能经过该结点的路径的最大值。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxPathSum(TreeNode* root) {
pair<int, int> re;
re = dfs(root);
return max(re.first, re.second);
}
pair<int, int> dfs(TreeNode* root) {
pair<int, int> myp;
if(root == NULL) {
myp.first = std::numeric_limits<int>::min() / 10000;
myp.second = std::numeric_limits<int>::min() / 10000;
return myp;
}
pair<int, int> leftp;
pair<int, int> rightp;
leftp = dfs(root->left);
rightp = dfs(root->right);
myp.first = max(root->val + max(leftp.first, rightp.first), root->val);
myp.second = max(max(root->val + leftp.first + rightp.first, root->val), max(leftp.second, rightp.second));
myp.second = max(myp.first, myp.second);
return myp;
}
};