【问题标题】:112.path sum leetcode wong answer for two test cases112.path sum leetcode wong 两个测试用例的答案
【发布时间】:2021-08-05 04:49:24
【问题描述】:

problem 我的代码在以下测试用例中失败。我不明白为什么。你能告诉我哪里出错了吗?我的代码通过 (114/116) 测试用例。我正在做 DFS 并检查 currSum==targetSum 是否满足此条件并且它也是一个叶节点,我正在设置全局变量``flag=true`。

[1,-2,-3,1,3,-2,null,-1]
-1
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    bool flag=false;
    void dfs(TreeNode *root, int currSum, int targetSum){
        if(root==NULL) return ;
        // cout<<currSum<<" ";
        currSum+=root->val;
        cout<<currSum<<" ";
        if(currSum == targetSum) {
            if(root->left==NULL && root->right==NULL) flag=true;
            return;
        }
        
        // else if(abs(currSum)>abs(targetSum)) return;
        dfs(root->left,currSum,targetSum);
        dfs(root->right,currSum,targetSum);
    }
    
    bool hasPathSum(TreeNode* root, int targetSum) {
        int currSum=0;
        dfs(root,currSum,targetSum);
        return flag;        
    }
};

【问题讨论】:

标签: c++ depth-first-search


【解决方案1】:

这是Path Sum Leetcode的一个简单直观的解决方案

class Solution {
public:
    bool hasPathSum(TreeNode* root, int sum) {
        if(!root) return false;
        if(!root->right && !root->left) return root->val==sum;
        return hasPathSum(root->left, sum-root->val) ||
               hasPathSum(root->right, sum-root->val);
    }
};

【讨论】:

    【解决方案2】:

    代码运行良好,逻辑完美,你忘了给 if 语句加括号

            if(root->left == NULL && root->right == NULL) {
                flag=true;
                return;
            }
     
    

    这是完整的代码

    class Solution {
    public:
        bool flag = false;
        void dfs(TreeNode *root, int currSum, int targetSum){
            if(root == NULL) return ;
            currSum += root->val;
            if(currSum == targetSum) {
                if(root->left==NULL && root->right==NULL) {
                    flag=true;
                    return;
                }
            }
            dfs(root->left,currSum,targetSum);
            dfs(root->right,currSum,targetSum);
        }
        
        bool hasPathSum(TreeNode* root, int targetSum) {
            int currSum=0;
            dfs(root,currSum,targetSum);
            return flag;        
        }
    };
    

    【讨论】:

      【解决方案3】:
      if(root->left==NULL && root->right==NULL) flag=true;
      return;
      

      这是错误的。即使条件不满足,您也会返回。由于存在负值,在进一步操作后,sum 可能在叶节点处再次变为targetSum

      正确:

      if(root->left==NULL && root->right==NULL){
          flag = true;
          return;
      }
      

      【讨论】:

      • 谢谢,非常感谢您的帮助
      猜你喜欢
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多