/* struct TreeNode { int val; struct TreeNode left; struct TreeNode right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };/ class Solution { public: vector path; vector<vector> res; vector<vector> FindPath(TreeNode root,int expectNumber) { if(!root) return res;

    dfs(root, expectNumber, res, path);
    
    return res;
}

void dfs(TreeNode* root, int sum, vector<vector<int>>& res, vector<int>& path)
{
    path.push_back(root -> val);
    if(root -> val == sum && !root -> left && !root -> right)
    {
        res.push_back(path);
    }
    if(root -> left) dfs(root -> left, sum - root -> val, res, path);
    if(root -> right) dfs(root -> right, sum - root -> val, res, path);
    path.pop_back();
}

};