在给定的代码中,存在一个问题导致在测试用例为[1,2,3]时无法得到正确的结果。
问题出在递归函数recurring的逻辑上。具体来说,在计算左子树和右子树的路径和时,应该是取较大值与0进行比较,而不是直接与路径和相加。修改后的代码如下:
class Solution {
public:
int maxSum = INT_MIN;
int recurring(TreeNode *root) {
if (!root) return 0;
int leftSum = max(0, recurring(root->left)); // 计算左子树最大路径和
int rightSum = max(0, recurring(root->right)); // 计算右子树最大路径和
// 更新最大路径和
maxSum = max(maxSum, root->val + leftSum + rightSum);
// 返回包含当前节点的最大路径和(只能选择左子树或右子树中较大的那个)
return root->val + max(leftSum, rightSum);
}
int maxPathSum(TreeNode* root) {
recurring(root);
return maxSum;
}
};
这样修改后,就能够正确地计算二叉树中任意节点到任意节点的最大路径和了。
内容由零声教学AI助手提供,问题来源于学员提问




