Leetcode 95 Solution

This article provides solution to leetcode question 95 (unique-binary-search-trees-ii)

https://leetcode.com/problems/unique-binary-search-trees-ii

Solution

/**
 * 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<TreeNode*> generateTrees(int l, int r)
    {
        vector<TreeNode*> res;

        if (l == r)
        {
            TreeNode* node = new TreeNode(l);
            res.push_back(node);
            return res;
        }

        for (int i = l; i <= r; i++)
        {
            vector<TreeNode*> left_trees;
            vector<TreeNode*> right_trees;

            if (i == l)
                left_trees.push_back(NULL);
            else
                left_trees = generateTrees(l, i - 1);

            if (i == r)
                right_trees.push_back(NULL);
            else
                right_trees = generateTrees(i + 1, r);

            for (auto it1 = left_trees.begin(); it1 != left_trees.end(); it1++)
            {
                for (auto it2 = right_trees.begin(); it2 != right_trees.end(); it2++)
                {
                    TreeNode* root = new TreeNode(i);
                    root->left = *it1;
                    root->right = *it2;

                    res.push_back(root);
                }
            }
        }

        return res;
    }

    vector<TreeNode*> generateTrees(int n) {
        return generateTrees(1, n);
    }
};