• 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);
            
            
        }
    };
  • 相关阅读:
    AJAX教程
    HTTP请求响应对照表
    JQuery教程
    服务器网络编程一
    servlet
    DOM浏览器文档模型
    在centos7下安装nodejs14
    将C#控制台程序部署到Linux系统
    在gitlab上通过python服务钩子实现自动部署
    Centos 7搭建Gitlab服务器超详细
  • 原文地址:https://www.cnblogs.com/zzw-/p/13289652.html
Copyright © 2020-2023  润新知