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);
        
        
    }
};
原文地址:https://www.cnblogs.com/zzw-/p/13289652.html