题目大意: 一个二叉树,每个节点都有一个整数值(可以为负数), 求这个二叉树,任意两个节点路径所有节点之和的最大值。
解题思路:递归求解。
#include <cmath>
using namespace std;
class Solution {
public:
int maxPathSum(TreeNode *root) {
if(root == NULL)
return 0;
int res = INT_MIN;
maxPath(root, res);
return res;
}
private:
int maxPath(TreeNode *root, int &res) {
if(root == NULL)
return 0;
int left_val = maxPath(root->left, res);
int right_val = maxPath(root->right, res);
int path = max(root->val, root->val + max(left_val, right_val));
res = max(res, max(path, root->val + left_val + right_val));
return path;
}
};