LeetCode 437.路径总和

Posted zzw-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 437.路径总和相关的知识,希望对你有一定的参考价值。

题目描述链接:https://leetcode-cn.com/problems/path-sum-iii/submissions/

基本思路:此题思路和LeetCode 1367中的二叉树中的列表一题思路基本类似。即同为通过枚举方法实现。对每一个节点进行枚举,查看是否有以改节点为首的路径满足条件。

这里记录一下自己在解决此问题中犯的一个错,即初使的如下代码:

 

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int res;
    int pathSum(TreeNode* root, int sum) {
          //考虑枚举每个节点
           if(!root)
             return 0;
           dfs(root,sum);
           pathSum(root->left,sum);
           pathSum(root->right,sum);
           return res;
          
    }
    void dfs(TreeNode* root,int sum){

        if(root==NULL){
            return ;
        }

        if(sum-root->val==0){
            res=res+1;
            return ;
        }
        dfs(root->left,sum-root->val);
        dfs(root->right,sum-root->val);
        
        
    }
};

在以上代码中一个不容易发现的错误即其中的如下代码:

        if(sum-root->val==0){
            res=res+1;
            return ;
        }



错就错在return上,会导致遗漏结果,导致出错。因为在这里return会遗漏掉可能后续还会再加出0的情况,与当前的sum相加同为sum的情况,以图来说明如下

 技术图片

 

 

 在此图中如果加入return就会导致1,-2,1,-1这个例子的遗漏,因为1,-2已经满足,就不会以1为根节点继续向下搜索了。。。

解决方案,去掉return即可,最终通过代码如下:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int res;
    int pathSum(TreeNode* root, int sum) {
          //考虑枚举每个节点
           if(!root)
             return 0;
           dfs(root,sum);
           pathSum(root->left,sum);
           pathSum(root->right,sum);
           return res;
          
    }
    void dfs(TreeNode* root,int sum){

        if(root==NULL){
            return ;
        }

        if(sum-root->val==0){
            res=res+1;

        }
        dfs(root->left,sum-root->val);
        dfs(root->right,sum-root->val);
        
        
    }
};

 

以上是关于LeetCode 437.路径总和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode437. 路径总和 III

*Leetcode 437. 路径总和 III

[LeetCode] 437. 路径总和 III ☆☆☆(递归)

LeetCode 437 路径总和III[DFS] HERODING的LeetCode之路

leetcode 437. 路径总和 III

[LeetCode] 437. 路径总和 III (递归,二叉树)