Leetcode 95. Unique Binary Search Trees II

Given an integer 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.

1 3 3 2 1
\ / / / \
3 2 1 1 3 2
/ / \
2 1 2 3

题意:这是96题的followup,要求返回的不只是方案个数了,而是具体的方案列表。

思路:
按照96题自开始的思路,求出每个点为根节点的方案list,然后merge到总list中。
对于每一个数字作为根节点的情况,对它左边和右边的数字仍然递归调用方法,生成它左右BST的list,最后通过两次循环就可以得到这个数字作为根节点时,总共的方案集合了。

public List generateTrees(int n) {

    return helper(1, n);
}

public List helper(int start, int end) {
    List res = new ArrayList<>();
    if (start > end) {
        res.add(null);
        return res;
    }

    if (start == end) {
        res.add(new TreeNode(start));
        return res;
    }

    List left = new ArrayList<>();
    List right = new ArrayList<>();
    for (int i = start; i <= end; i++) {
        //TreeNode root = new TreeNode(i);//bug 
        left = helper(start, i - 1);
        right = helper(i + 1, end);
        for (TreeNode lt : left) {
            for (TreeNode rt : right) {
                TreeNode root = new TreeNode(i);
                root.left = lt;
                root.right = rt;
                res.add(root);
            }
        }
    }

    return res;
}

你可能感兴趣的:(Leetcode 95. Unique Binary Search Trees II)