首页 > 代码库 > Path Sum

Path Sum

问:二叉树是否存在路径和等于sum的路径,若存在输出true,否则输出false
分析:递归调用二叉树,每次将上一层的val值传递给子结点并加上子节点的val,当传递到某个结点为叶子结点时,判断其val值是否等于sum
错点:二叉树为空,则无论sum为多少都为false,这个容易造成RE
        二叉树只有根节点,则直接判断其值与sum的关系

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

  

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