首页 > 其他 > 详细

LeetCode——不同的二叉搜索树 II

时间:2020-07-19 17:02:07      阅读:36      评论:0      收藏:0      [点我收藏+]

Q:给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树 。
技术分享图片

A:递归解决这个问题,分别把每个点作为root,然后把子树连上去。

    public List<TreeNode> generateTrees(int n) {
        if (n == 0)
            return new LinkedList<>();
        return generate(1, n);
    }

    private List<TreeNode> generate(int start, int end) {
        List<TreeNode> alltrees = new LinkedList<>();
        if (start > end) {
            alltrees.add(null);
            return alltrees;
        }
        for (int i = start; i <= end; i++) {//每个点作为根节点
            List<TreeNode> leftTree = generate(start, i - 1);//所有可能的左子树集合list
            List<TreeNode> rightTree = generate(i + 1, end);//所有可能的右子树集合list
            for (TreeNode l : leftTree) {
                for (TreeNode r : rightTree) {
                    TreeNode root = new TreeNode(i);
                    root.left = l;
                    root.right = r;
                    alltrees.add(root);
                }
            }
        }
        return alltrees;
    }

LeetCode——不同的二叉搜索树 II

原文:https://www.cnblogs.com/xym4869/p/13339737.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!