簡體   English   中英

樹的路徑中的最大總和是多少

[英]what is the max sum in path of tree

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 大於任何負數 integer。

所以總的來說你的代碼應該是這樣的:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM