循环遍历 i 顶点作为根节点,其左子树的数值为 start 到 i - 1的所有排列,右子树的数值为 i + 1到end的所有排列
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
vector<TreeNode *>res;
if(n == 0){
return res;
}
return gem(1,n);
}
vector<TreeNode *> gem(int start,int end){
vector<TreeNode *>res;
if(start > end){
res.push_back(NULL);
}
for(int i = start;i <= end;i++){
vector<TreeNode * >lefts = gem(start,i - 1);
vector<TreeNode * >rights = gem(i + 1,end);
for(auto left:lefts){
for(auto right:rights){
TreeNode *temp = new TreeNode(i);
temp->left = left;
temp->right = right;
res.push_back(temp);
}
}
}
return res;
}
};