根据给出的代码,错误可能是由于遍历顺序导致的。在递归函数中,当前节点的左子树和右子树都应该被访问到并计算它们各自的最大路径和,然后再加上当前节点的值。但是这段代码中却将root->left传递给了递归函数,并且将root->right传递给了另一个递归函数。这可能导致计算结果不正确。
修改代码如下:
int recurring(TreeNode* root, int& maxSum) {
if (!root) return 0;
int left = max(recurring(root->left, maxSum), 0);
int right = max(recurring(root->right, maxSum), 0);
// 更新最大路径和
maxSum = max(maxSum, left + right + root->val);
// 返回包含当前节点的单边最大路径和
return max(left, right) + root->val;
}
int maxPathSum(TreeNode* root) {
int maxSum = INT_MIN; // 初始化为最小值
recurring(root, maxSum);
return maxSum;
}
这样修改后,测试用例1,2,3应该可以得到正确的结果。希望对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问




