LeetCode 095 Unique Binary Search Trees II

来源:互联网 发布:mac版flashcs6汉化包 编辑:程序博客网 时间:2024/06/04 20:50

题目描述

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.

这里写图片描述

代码

    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;    }
1 0
原创粉丝点击