https://leetcode.com/problems/path-sum-ii/

void BT(vector<vector<int>>& output, vector<int>& path, TreeNode* node, int targetSum){
    if(node->left == NULL && node->right == NULL)
    {
        if(targetSum == node->val){
            path.push_back(node->val);
            output.push_back(path);
            path.pop_back();
            return;
        }else
            return;
    }

    int newTarget = targetSum - node->val;
    if(node->left){
        path.push_back(node->val);
        BT(output, path, node->left, newTarget);
        path.pop_back();
    }
    if(node->right){
        path.push_back(node->val);
        BT(output, path, node->right, newTarget);
        path.pop_back();
    }
}

class Solution {
public:
    vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
        vector<vector<int>> output;
        vector<int> path;
        if(root == NULL) return output;
        BT(output, path, root,targetSum);
        return output;
    }
};