96.不同的二叉搜索树II
给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。
- 对于每个结点的所有二叉搜索树在于要遍历左边的结点能形成的所有二叉搜索树和右边的结点形成的所有二叉搜索树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<TreeNode*> generateTrees(int n) {
if(n == 0) return {};
else return generate(1,n);
}
vector<TreeNode *> generate(int left,int right){
vector<TreeNode *> res;
if(left > right) {
res.push_back(NULL);
return res;
}
for(int i = left;i < right+1;i++){
vector<TreeNode*> leftall = generate(left,i-1);
vector<TreeNode*> rightall = generate(i+1,right);
for(TreeNode *leftnode:leftall){
for(TreeNode* rightnode:rightall){
TreeNode* p = new TreeNode(i);
p->left = leftnode;
p->right = rightnode;
res.push_back(p);
}
}
}
return res;
}
};
通过时间: