簡體   English   中英

找到最大路徑總和。我們可以在二叉樹的任何節點中開始和結束

[英]find the maximum path sum.,which we can start and end in any node in the binary tree

這是問題鏈接https://leetcode.com/problems/binary-tree-maximum-path-sum/ ,我的解決方案是我可以將樹從數組轉換為數組,所以我選擇使用預排序樹遍歷,並且我參考kadane的算法在數組中找到最大值,這是我的代碼,當我運行程序時,結果始終為零,但是在我的觀點中,它應該是正確的,我無法弄清楚為什么它不起作用順便說一句,問題提示是使用dfs,我對dfs不熟悉,有人可以使用dfs方法對此問題提供一些想法,並告訴我如何學習dfs,任何論文或筆記,視頻都可以,提前致謝!

 int maxPathSum(TreeNode *root) {
  vector<int>res;
  int max;
  if (root){
      res.push_back(root->val);
      maxPathSum(root->left);
      maxPathSum(root->right);
  }
  else{
      return 0;
  }
  max = maxpathsum1(res);
  return max;
}
int maxpathsum1(vector<int>&res){
    int cur,max;
    int len = res.size();
    cur = 0;
    max = 0;
    for (int i=0;i<len-1;i++){
        cur = cur+res[i];
        if (cur<0){
            cur = 0;
        }
        if (max<cur){
            max = cur;
        }
    }
    return max;
}

dfs是一種遍歷樹中所有節點(更通常是在圖形中)的算法,因此它確實可以解決您的問題。 您可以運行dfs算法,同時每次對左子樹與右子樹之間的最大路徑加上根節點本身進行求和。 您可以在Coreman的“算法簡介”書中找到有關dfs的更多信息。

關於您的(非常相似的)解決方案,您沒有在“ maxPathSum”函數中使用遞歸的返回值。 在調用“ root-> left”和“ root-> right”上的遞歸后,應該獲取返回的這些值,驗證它們是否為正,並將它們求和成一些“ max2”變量並使用它。

暫無
暫無

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

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