/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型vector<vector<>>
     */

    vector<vector<int>> pathSum(TreeNode* root, int sum) {
        vector<vector<int>> res;
        vector<int> temp;
        findPath(root, sum, temp, res);
        return res;
    }

private:
    void findPath(TreeNode* node, int sum, vector<int> &temp,vector<vector<int>> &vec){
        if(!node)
            return;

        temp.push_back(node->val);
        if(!node->left && !node->right){
            if(node->val==sum){
                vec.push_back(temp);
                return;
            }
            else{
                return;
            }
        }
        if(node->left){
            findPath(node->left,sum-node->val,temp,vec);
            temp.pop_back();
        }
        if(node->right){
            findPath(node->right,sum-node->val,temp,vec);
            temp.pop_back();
        }
    }


};