class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*> forest;
if(n==0) return forest;
forest = generateTrees(1,n);
return forest;
}
vector<TreeNode*> generateTrees(int start,int n) {
vector<TreeNode*> forest;
TreeNode* temp;
if(start>n) {
temp = NULL;
forest.push_back(temp);
return forest;
}
vector<TreeNode*> left;
vector<TreeNode*> right;
for(int i=start;i<=n;i++){
left = generateTrees(start,i-1);
right = generateTrees(i+1,n);
for(int j = 0;j<left.size();j++){
for(int k=0;k<right.size();k++){
temp = new TreeNode(i);
temp->left = left[j];
temp->right = right[k];
forest.push_back(temp);
}
}
}
return forest;
}
};
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*> forest;
if(n==0) return forest;
forest = generateTrees(1,n);
return forest;
}
vector<TreeNode*> generateTrees(int start,int n) {
vector<TreeNode*> forest;
TreeNode* temp;
if(start>n) {
temp = NULL;
forest.push_back(temp);
return forest;
}
vector<TreeNode*> left;
vector<TreeNode*> right;
for(int i=start;i<=n;i++){
left = generateTrees(start,i-1);
right = generateTrees(i+1,n);
for(int j = 0;j<left.size();j++){
for(int k=0;k<right.size();k++){
temp = new TreeNode(i);
temp->left = left[j];
temp->right = right[k];
forest.push_back(temp);
}
}
}
return forest;
}
};