Given 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
给一个整数,求以1-n所能组成的所有二叉搜索树
创建一个数组ans[]存储结果,递归求出左子树与右子树的结果,
再使用二重循环分级别将左右子树一一对应至一个ans元素中
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode *> ans;
if(n==0)
return ans;
ans=dfs(1,n);
return ans;
}
vector<TreeNode*> dfs(int le,int ri)
{
vector<TreeNode*> ans;
if(le>ri){
ans.push_back(NULL);
return ans;
}
for(int i=le;i<=ri;i++){
vector<TreeNode*> left=dfs(le,i-1);
vector<TreeNode*> right=dfs(i+1,ri);
for(int j=0;j<left.size();j++)
{
for(int a=0;a<right.size();a++){
TreeNode *p=new TreeNode(i);
p->left=left[j];
p->right=right[a];
ans.push_back(p);
}
}
}
return ans;
}
};