Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 树路径的最大和是多少_C++_Algorithm - Fatal编程技术网

C++ 树路径的最大和是多少

C++ 树路径的最大和是多少,c++,algorithm,C++,Algorithm,这是极客对极客的提问。我写了我的答案,但它是错误的。我的逻辑有什么问题 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-&

这是极客对极客的提问。我写了我的答案,但它是错误的。我的逻辑有什么问题

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);
您需要检查
根目录是否同时包含两个子目录。否则,在最终答案中不会考虑这些问题

你也是

if(root==NULL)  return 0;

由于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;
}

只是一个有根据的猜测:
intl=path(root->left,max\u sum)更改
max_sum
;如果您希望在第二次调用
int r=path(root->right,max\u sum)中出现
max\u sum
收到与第一次调用相同的
max_sum
值,那么您可能错了。请在问题中包含a。代码应该做什么?输入、输出和预期输出是什么?
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;
}