16. Unique Binary Search Trees II
Given an integer n
, return all the structurally unique BST's (binary search trees), which has exactly n
nodes of unique values from 1
to n
. Return the answer in any order.
Example 1:
Input: n = 3
Output: [[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
Example 2:
Input: n = 1
Output: [[1]]
Solution: (Recursion)
Approach: Building BST for each n(1 - n)
class Solution
{
public:
vector<TreeNode *> generateBST(int start, int end)
{
vector<TreeNode *> v;
if (start > end)
{
v.push_back(NULL);
return v;
}
if (start == end)
{
TreeNode *t = new TreeNode(start);
v.push_back(t);
return v;
}
for (int i = start; i <= end; i++)
{
vector<TreeNode *> lt = generateBST(start, i - 1);
vector<TreeNode *> rt = generateBST(i + 1, end);
for (int k = 0; k < lt.size(); k++)
{
for (int j = 0; j < rt.size(); j++)
{
TreeNode *t = new TreeNode(i);
t->left = lt[k];
t->right = rt[j];
v.push_back(t);
}
}
}
return v;
}
vector<TreeNode *> generateTrees(int n)
{
vector<TreeNode *> res = generateBST(1, n);
return res;
}
};
Time Complexity: (2^n) Maps can be used to optimize
Last updated
Was this helpful?