Unique Binary Search Trees II

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

  • Time: O(n)
  • Space: O(1)
public List<TreeNode> generateTrees(int n) {
    if (n == 0) return new ArrayList<>();
    return generateTreesHelper(1, n);
}

private List<TreeNode> generateTreesHelper(int start, int end) {
    List<TreeNode> ret = new ArrayList<>();
    if (start >= end) {
        ret.add(null);
        return ret;
    }
    for (int i = start; i <= end; i++) {
        List<TreeNode> left = generateTreesHelper(start, i - 1);
        List<TreeNode> right = generateTreesHelper(i + 1, end);
        for (TreeNode l : left) {
            for (TreeNode r : right) {
                TreeNode node = new TreeNode(i);
                node.left = l;
                node.right = r;
                ret.add(node);
            }
        }
    }
    return ret;
}

results matching ""

    No results matching ""