20230317 顺利通过
20230319 顺利通过
20230403 ans = max(ans, left + right + root->val);
return max(left, right) + root->val;
ans = -0x3f3f3f3f;
原题解
题目
约束
题解
class Solution {
private:
int maxSum = INT_MIN;
public:
int maxGain(TreeNode* node) {
if (node == nullptr) {
return 0;
}
// 递归计算左右子节点的最大贡献值
// 只有在最大贡献值大于 0 时,才会选取对应子节点
int leftGain = max(maxGain(node->left), 0);
int rightGain = max(maxGain(node->right), 0);
// 节点的最大路径和取决于该节点的值与该节点的左右子节点的最大贡献值
int priceNewpath = node->val + leftGain + rightGain;
// 更新答案
maxSum = max(maxSum, priceNewpath);
// 返回节点的最大贡献值
return node->val + max(leftGain, rightGain);
}
int maxPathSum(TreeNode* root) {
maxGain(root);
return maxSum;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int ans = -0x3f3f3f3f;
int maxlen(TreeNode* root){
if(!root) return 0;
int left = max(maxlen(root->left), 0);
int right = max(maxlen(root->right), 0);
ans = max(ans, root->val + left + right);
return root->val + max(left, right);
}
int maxPathSum(TreeNode* root) {
maxlen(root);
return ans;
}
};