class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型
     */
    int road=0;

    void jisuan(TreeNode* root,int sum,int s){   //从当前子树进行计算,只要有一处等于sum,road++
        s+=root->val;  //s用于计算从当前子树根节点到目前节点的和
        if(s==sum) road++;    //只要出现一次符合的值 road就自增一次
        if(root->left!=NULL) jisuan(root->left,sum,s);
        if(root->right!=NULL) jisuan(root->right,sum,s);
    }

    void quan(TreeNode* root,int sum){     //从每个节点都要算一下往下有没有符合sum的路径
        jisuan(root,sum,0);
        if(root->left!=NULL) quan(root->left,sum);
        if(root->right!=NULL) quan(root->right,sum);
    }


    int FindPath(TreeNode* root, int sum) {
        // write code here
        if(root==NULL) return 0;
        quan(root,sum);
        return road;
    }
};