思路和上一题“Unique Binary Search Trees”一样,复杂度待求。代码如下:
class Solution {
public:
vector<TreeNode *> generateTrees(int n) {
return generate(1, n);
}
vector<TreeNode*> generate(int start, int end) {
vector<TreeNode*> trees;
if(start > end) {
trees.push_back(NULL);
return trees;
}
for(int k=start; k<=end; ++k) {
vector<TreeNode*> lefts = generate(start, k-1);
vector<TreeNode*> rights= generate(k+1, end);
for(auto left: lefts) {
for(auto right: rights) {
TreeNode *root = new TreeNode(k);
root->left = left;
root->right = right;
trees.push_back(root);
}
}
}
return trees;
}
};