最近忙着水论文,好久没刷题了,现在真是看到论文就烦啊,来刷刷题。
返回最大值,这题需要注意的是,在递归的时候不能返回最大值,只能返回单向的值,最大值每次保留即可。
int maxPathSum(TreeNode *root)
{
max_sum = INT_MIN;
dfs(root);
return max_sum;
}
int dfs1(const TreeNode *root)
{
if (root == nullptr)return 0;
int l = dfs1(root->left);
int r = dfs1(root->right);
int sum = root->val;
if (l > 0)sum += l;
if (r > 0)sum += r;
max_sum = max(max_sum, sum);
//注意返回的是单向的值而不是最大值
return max(l, r) > 0 ? max(l, r) + root->val : root->val;
}
View Code