给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
    说明: 叶子节点是指没有子节点的节点。
    示例:
    给定如下二叉树,以及目标和 sum = 22

    1. 5
    2. / \
    3. 4 8
    4. / / \
    5. 11 13 4
    6. / \ / \
    7. 7 2 5 1

    返回:

    [
       [5,4,11,2],
       [5,8,4,5]
    ]
    
    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        vector<vector<int>> pathSum(TreeNode* root, int sum) {
            vector<vector<int>> res;
            if(root == NULL){
                return res;
            }
            sum = sum - root->val;
            if(root->left == NULL && root->right == NULL){
                if(sum == 0){
                    vector<int> temp;
                    temp.push_back(root->val);
                    res.push_back(temp);
                    return res;
                }else {
                    return res;
                }
            }
            vector<vector<int>> left  = pathSum(root->left, sum);
            vector<vector<int>> right = pathSum(root->right, sum);
            if(left.size() > 0){
                for(int i = 0; i<left.size();i++){
                    vector<int> temp = left[i];
                    temp.insert(temp.begin(), root->val);
                    res.push_back(temp);
                }
            }
    
            if(right.size() > 0){
                for(int i = 0; i<right.size();i++){
                    vector<int> temp = right[i];
                    temp.insert(temp.begin(), root->val);
                    res.push_back(temp);
                }
            }
    
            return  res;
        }
    };