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
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
这道题目在上一题的基础上需要我们把所有的树都输出!并且输出的格式需要按照leetcode的样子
class Solution {
public:
vector<TreeNode *> generateTrees(int n) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
return generate(0,n-1);
}
vector<TreeNode*> generate(int begin,int end){
vector<TreeNode* > ret;
if(begin>end){
ret.push_back(NULL);
return ret;
}
for(int i=begin ; i<=end ; i++){
vector<TreeNode* >leftTree=generate(begin,i-1);//all possible left trees
vector<TreeNode* >rightTree=generate(i+1,end);//all possible right trees
for(int j=0 ; j<leftTree.size() ; j++)
for(int k=0 ; k<rightTree.size() ; k++){//all posiible trees with root i,left j,right k
TreeNode *node=new TreeNode(i+1);
ret.push_back(node);
node->left=leftTree[j];
node->right=rightTree[k];
}
}
return ret;
}
};