struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
vector<TreeNode*>generate(int start, int end)
{
vector<TreeNode*>ret;
if(start>end){
ret.push_back(NULL);
return ret;
}
for(int i=start;i<=end;i++){
vector<TreeNode*>lTree=generate(start,i-1);
vector<TreeNode*>rTree=generate(i+1,end);
for(int j=0;j<lTree.size();j++){
for(int k=0;k<rTree.size();k++){
TreeNode* node=new TreeNode(i+1);
ret.push_back(node);
node->left=lTree[j];
node->right=rTree[k];
}
}
}
return ret;
}
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode*>ret;
if(n<=0) return ret;
return generate(0,n-1);
}
};