Question
Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1…n.
For example,
Given n = 3, your program should return all 5 unique BST’s shown below.
1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
Solution
Result: Accepted Time: 28 ms
Here should be some explanations.
class Solution {
public:
    vector<TreeNode*> dfs(int left,int right)
    {
        if(left >= right)
            return vector<TreeNode*>{NULL};
        vector<TreeNode*> ret;
        for(int i = left; i < right; i++)
        {
            vector<TreeNode*> lvect = dfs(left,i);
            vector<TreeNode*> rvect = dfs(i+1,right);
            for(const auto &lft:lvect)
                for(const auto & rht:rvect)
                {
                    TreeNode * tmp = new TreeNode(i);
                    tmp->left = lft;
                    tmp->right = rht;
                    ret.push_back(tmp);
                }
        }
        return ret;
    }
    vector<TreeNode*> generateTrees(int n) {
        if(!n) return vector<TreeNode*>();
        return dfs(1,n+1);
    }
};
Complexity Analytics
- Time Complexity: ?
- Space Complexity: ?