利用回溯求解,注意判断退出条件

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型vector<vector<>>
     */
    vector<int> vec;
    vector<vector<int>> ans;
    void getpath(TreeNode* root, int sum, int path){
        if(root==nullptr) return;
        if(!root->left && !root->right){
            if(path+root->val==sum){
                vec.push_back(root->val);
                ans.push_back(vec);
                vec.pop_back();
                return;
            }
            return;
        }
        vec.push_back(root->val);
        path+=root->val;
        getpath(root->left, sum, path);
        path-=root->val;
        vec.pop_back();
        vec.push_back(root->val);
        path+=root->val;
        getpath(root->right,sum, path);
        path-=root->val;
        vec.pop_back();
    }

    vector<vector<int> > pathSum(TreeNode* root, int sum) {
        vec.clear();
        ans.clear();
        if(root == nullptr) return {};
        getpath(root,sum,0);
        return ans;
    }
};