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;
}
};
通过时间:

本文探讨了如何生成由1到n整数构成的所有可能的二叉搜索树,通过递归算法实现,详细解析了左子树和右子树的组合方式。
1311

被折叠的 条评论
为什么被折叠?



