这段代码存在一个逻辑问题。在recurring()函数中,计算左右子树的路径和时,应该将当前节点的值加入进去,而不是分别判断左右子树是否大于0后再相加。
以下是修复后的代码:
class Solution {
public:
int max = INT_MIN;
int recurring(TreeNode* root) {
if (!root) return 0;
int leftSum = max(0, recurring(root->left));
int rightSum = max(0, recurring(root->right));
int currentSum = leftSum + rightSum + root->val;
max = max(max, currentSum);
return root->val + max(leftSum, rightSum);
}
int maxPathSum(TreeNode* root) {
if (!root) return 0;
recurring(root);
return max;
}
};
修正后,可以正确计算出二叉树中的最大路径和。
内容由零声教学AI助手提供,问题来源于学员提问




