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

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;
    }
posted @ 2020-07-19 15:01  Shaw_喆宇  阅读(115)  评论(0编辑  收藏  举报