Skip to content

Commit 63645c4

Browse files
refactor 95
1 parent f00772c commit 63645c4

File tree

1 file changed

+32
-27
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+32
-27
lines changed

src/main/java/com/fishercoder/solutions/_95.java

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@
55
import java.util.ArrayList;
66
import java.util.List;
77

8-
/**Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.
8+
/**
9+
* 95. Unique Binary Search Trees II
10+
*
11+
* Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.
912
1013
For example,
1114
Given n = 3, your program should return all 5 unique BST's shown below.
@@ -17,37 +20,39 @@
1720
2 1 2 3*/
1821
public class _95 {
1922

20-
public List<TreeNode> generateTrees_pure_recursion(int n) {
21-
List<TreeNode> result = new ArrayList<TreeNode>();
22-
if (n == 0) {
23-
return result;
23+
public static class Solution1 {
24+
public List<TreeNode> generateTrees(int n) {
25+
List<TreeNode> result = new ArrayList();
26+
if (n == 0) {
27+
return result;
28+
}
29+
return generateTrees(1, n);
2430
}
25-
return generateTrees(1, n);
26-
}
2731

28-
private List<TreeNode> generateTrees(int start, int end) {
29-
List<TreeNode> result = new ArrayList<TreeNode>();
30-
if (start > end) {
31-
result.add(null);
32-
return result;
33-
}
34-
if (start == end) {
35-
result.add(new TreeNode(start));
36-
return result;
37-
}
32+
private List<TreeNode> generateTrees(int start, int end) {
33+
List<TreeNode> result = new ArrayList();
34+
if (start > end) {
35+
result.add(null);
36+
return result;
37+
}
38+
if (start == end) {
39+
result.add(new TreeNode(start));
40+
return result;
41+
}
3842

39-
for (int i = start; i <= end; i++) {
40-
List<TreeNode> leftList = generateTrees(start, i - 1);
41-
List<TreeNode> rightList = generateTrees(i + 1, end);
42-
for (TreeNode left : leftList) {
43-
for (TreeNode right : rightList) {
44-
TreeNode root = new TreeNode(i);
45-
root.left = left;
46-
root.right = right;
47-
result.add(root);
43+
for (int i = start; i <= end; i++) {
44+
List<TreeNode> leftList = generateTrees(start, i - 1);
45+
List<TreeNode> rightList = generateTrees(i + 1, end);
46+
for (TreeNode left : leftList) {
47+
for (TreeNode right : rightList) {
48+
TreeNode root = new TreeNode(i);
49+
root.left = left;
50+
root.right = right;
51+
result.add(root);
52+
}
4853
}
4954
}
55+
return result;
5056
}
51-
return result;
5257
}
5358
}

0 commit comments

Comments
 (0)