栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

LeetCode-100题(Hot) 95. 不同的二叉搜索树 II [Java实现] [极速]

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

LeetCode-100题(Hot) 95. 不同的二叉搜索树 II [Java实现] [极速]

给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。

示例 1:

输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]


方法一:递归

对于一棵二叉搜索树,我们如此构建:

    private TreeNode generateTree(int start, int end) {
        if (start > end) {
            return null;
        }
        int root = (start+end) / 2;
        TreeNode left = generateTree(start, root-1);
        TreeNode right = generateTree(root+1, end);
        return new TreeNode(root, left, right);
    }

则对于所有可能的二叉树,我们可以依次枚举所有可能的根节点并递归得到其左右节点,对于每次递归得到的所有左右节点,我们用List储存起来进行枚举。实现如下:

    public List generateTrees(int n) {
        return generateTrees(1, n);
    }

    private List generateTrees(int start, int end) {
        List nodes = new ArrayList<>();
        if (start >= end) {
            nodes.add(start == end ? new TreeNode(start) : null);
            return nodes;
        }
        for (int root = start; root <= end; ++ root) {
            for (TreeNode left : generateTrees(start, root-1)) {
                for (TreeNode right : generateTrees(root+1, end)) {
                    nodes.add(new TreeNode(root, left, right));
                }
            }
        }
        return nodes;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号