最近忙着水论文,好久没刷题了,现在真是看到论文就烦啊,来刷刷题。
返回最大值,这题需要注意的是,在递归的时候不能返回最大值,只能返回单向的值,最大值每次保留即可。
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; }