c++ - 树的路径中的最大总和是多少
问题描述
https://practice.geeksforgeeks.org/problems/maximum-path-sum/1 这是来自极客的问题。我写了我的答案。但这是错误的。我的逻辑有什么问题?
int path(Node *root, int & max_sum)
{
if(root==NULL)
return 0;
int l=path(root->left,max_sum);
int r=path(root->right,max_sum);
max_sum=max(max_sum,l+r+root->data);
return max(l,r)+root->data;
}
int maxPathSum(Node *root)
{
int max_sum=INT_MIN;
path(root,max_sum);
return max_sum;
// code here
}
解决方案
问题陈述说
找到从一个叶节点到另一个叶节点的最大可能总和。
所以,当你这样做
max_sum=max(max_sum,l+r+root->data);
您将需要检查是否root
有两个孩子。否则,它们将不会被考虑在最终答案中。
你也做过
if(root==NULL) return 0;
和
max(l,r)+root->data;
这两个组合都覆盖了一个值为负的叶子节点子节点,因为 0 大于任何负整数。
所以总的来说你的代码应该是这样的:
int path(Node *root, int & max_sum)
{
if(root==NULL) return 0;
int l=path(root->left,max_sum);
int r=path(root->right,max_sum);
if(root->left != NULL && root->right != NULL){
max_sum = max(max_sum,l + r + root->data);
}
if(root->left != NULL && root->right == NULL) return l + root->data;
if(root->right != NULL && root->left == NULL) return r + root->data;
return max(l,r) + root->data;
}
int maxPathSum(Node *root)
{
int max_sum=INT_MIN;
path(root,max_sum);
return max_sum;
}
推荐阅读
- django - 当我从列表页跳转到详情页时,url跳转了,但是页面没有显示,提示'ZiXun' object is not iterable
- javascript - 如何使用 PHP 槽 ajax 将文件保存在特定的 server* 文件夹中。不能通过浏览器下载
- firebase - 如何计算 Firebase 中的 MAU?我需要 BigQuery 吗?
- python - 使用正则表达式从多行字符串输出中提取路由器 MAC 地址
- javascript - 如何从 reactjs 中的静态方法调用另一个方法?
- python - 嵌套函数上的 Numba 加速
- android - 如何在 Kotlin 中打开完全展开的 BottomSheetDialogFragment?
- string - 尝试从文本文件中的行创建 Map[String, String],不断出现错误
- r - 计算唯一标识符并分层
- performance - Kestrel 服务器与 HTTP.sys