95. Unique Binary Search Trees II

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Solution {
public List<TreeNode> generateTrees(int n) {
return generateTrees(1, n);
}

/**
* @param start inclusive
* @param end inclusive
*/
private List<TreeNode> generateTrees(int start, int end) {
List<TreeNode> treeList = new ArrayList<>();
if (start > end) {
treeList.add(null);
return treeList;
}

for (int root = start; root <= end; root++) {
List<TreeNode> leftTrees = generateTrees(start, root - 1);
List<TreeNode> rightTrees = generateTrees(root + 1, end);

for (TreeNode leftTreeRoot : leftTrees) {
for (TreeNode rightTreeRoot : rightTrees) {
TreeNode rootNode = new TreeNode(root);
rootNode.left = leftTreeRoot;
rootNode.right = rightTreeRoot;
treeList.add(rootNode);
}
}
}

return treeList;
}
}

References

95. Unique Binary Search Trees II