/*

struct TreeNode {

    int val;

    struct TreeNode *left;

    struct TreeNode *right;

    TreeNode(int x) :

            val(x), left(NULL), right(NULL) {

    }

};*/

class Solution {

public:

    vector<vector<int>> result;

    vector<int>test;

    vector<vector<int>> FindPath(TreeNode* root,int expectNumber) {

        Find(root,expectNumber);

        return result;

    }

    //采用dfs的方法

    void Find(TreeNode* root,int num){

        //实现递归出口

        if(root==NULL){

            return;

        }

        test.push_back(root->val);

        if(!root->left&&!root->right&&num==root->val){

            result.push_back(test);

        }

        else{

            //接着判断左右子树

            if(root->left){

                Find(root->left,num-root->val);

            }

            if(root->right){

                Find(root->right,num-root->val);

            }   

            

        }

        test.pop_back();

    }

};