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);
    }
};

  

posted @ 2014-08-01 07:50  calmound  阅读(1171)  评论(0编辑  收藏  举报