zoukankan      html  css  js  c++  java
  • 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);
            
            
        }
    };
  • 相关阅读:
    CentOS 7下安装Python3.6
    Django项目运行时出现self.status.split(' ',1)[0], self.bytes_sent,ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
    pycharm激活码
    CentOS7环境下安装VIM8 并支撑python3
    CentOS7下源码安装mysql
    formset和modelformset
    ModelForm中定制datetimepicker插件
    ModelForm--定制样式
    Django--models字段参数 limit_choices_to
    复习--类的继承
  • 原文地址:https://www.cnblogs.com/zzw-/p/13289652.html
Copyright © 2011-2022 走看看