LeetCode 095 Unique Binary Search Trees II

题目描述

Given n, generate all structurally unique BST’s (binary search trees) that store values 1…n.

For example,
Given n = 3, your program should return all 5 unique BST’s shown below.

《LeetCode 095 Unique Binary Search Trees II》

代码

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x) {
            val = x;
        }
    }

    public List<TreeNode> generateTrees(int n) {

        int[] array = new int[n];

        //建立1~n的数组
        for (int i = 0; i < n; i++) {
            array[i] = i + 1;
        }

        return generateTrees(array);
    }

    List<TreeNode> generateTrees(int[] array) {

        if (array.length == 0) {
            return new ArrayList<TreeNode>(
                    Collections.<TreeNode> singletonList(null));
        }

        ArrayList<TreeNode> result = new ArrayList<TreeNode>();

        // 数组的每一个元素(array[i]),分别作为根结点
        for (int i = 0; i < array.length; i++) {
            // array[i]作为根结点,array[i]之前的元素为左结点,array[i]之后的元素为右结点
            for (TreeNode left : generateTrees(Arrays.copyOfRange(array, 0, i))) {
                for (TreeNode right : generateTrees(Arrays.copyOfRange(array,
                        i + 1, array.length))) {
                    TreeNode root = new TreeNode(array[i]);

                    root.left = left;
                    root.right = right;

                    result.add(root);
                }
            }
        }

        return result;
    }
    原文作者:_我们的存在
    原文地址: https://blog.csdn.net/yano_nankai/article/details/49455457
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞