Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.
这个有所变化,是要求输出卡特兰数的结果,可以用DFS。
以每个节点作为树的根节点,生成一系列对应的二叉树。
vector<TreeNode *> generateTrees(int n) {
return f(1,n);
}
vector<TreeNode *> f(int start, int end){
vector<TreeNode *> result;
if(start>end){
result.push_back(NULL);
return result;
}
for(int k=start;k<=end;k++){
vector<TreeNode *> left=f(start,k-1);
vector<TreeNode *> right=f(k+1,end);
for(int i=0;i<left.size();i++){
for(int j=0;j<right.size();j++){
TreeNode * root=new TreeNode(k);
root->left=left[i];
root->right=right[j];
result.push_back(root);
}
}
}
return result;
}