这道题emmm不会写,主要是思路思维很混乱,
返回的是互不相同的二叉搜索树,所以我们需要列举出对每一个根节点的遍历;
然后需要对左子树和右子树进行分别递归构造。
最让我为难的是将root所有左子树右子树组合在一起。
所以是看了别人的代码之后的产物:
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
if(n == 0) return {};
return build(1, n);
}
vector<TreeNode*> build(int lo, int hi){
vector<TreeNode*> res = {};
if(lo > hi){
res.push_back(NULL);
return res;
}
for(int i = lo;i <= hi;i++){
vector<TreeNode*> leftTree = build(lo, i - 1);
vector<TreeNode*> rightTree = build(i + 1, hi);
for(int j = 0;j < leftTree.size();j++){
for(int k = 0;k < rightTree.size();k++){
TreeNode* root = new TreeNode(i);
root->left = leftTree[j];
root->right = rightTree[k];
res.push_back(root);
}
}
}
return res;
}
};