侧边栏壁纸
博主头像
Hope博主等级

努力赚钱的工科研究生

  • 累计撰写 362 篇文章
  • 累计创建 129 个标签
  • 累计收到 5 条评论
标签搜索

LeetCode 95. 不同的二叉搜索树 II

Hope
2022-02-21 / 0 评论 / 0 点赞 / 337 阅读 / 797 字
温馨提示:
本文最后更新于 2022-02-21,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

LeetCode 95. 不同的二叉搜索树 II

思路:
对于一个搜索树,只要满足左子树小于根节点,右子树大于根节点即可,所以我们可以对1~n的数字遍历,每一个数字当做根节点的时候,我们计算出左搜索子树与右搜索子树,然后把所有的情况与根节点i组合一起,插入到res答案中。

代码:

/**
 * 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) return {};
        return dfs(1,n);
    }

    vector<TreeNode*> dfs(int l,int r){
        if(l > r) return {NULL};
        vector<TreeNode*> res;

        for(int i=l;i<=r;i++){
            vector<TreeNode*> L=dfs(l,i-1);
            vector<TreeNode*> R=dfs(i+1,r);
            for(auto l : L){
                for(auto r : R){
                    TreeNode *t=new TreeNode(i);
                    t->left=l;
                    t->right=r;
                    res.push_back(t);
                }
            }
        }
        return res;
    }
};
0

评论区