Skip to content

Commit 8aaace1

Browse files
committed
2022-06-01 update: added "Unique Binary Search Trees II"
1 parent 650123e commit 8aaace1

File tree

2 files changed

+107
-0
lines changed

2 files changed

+107
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.smlnskgmail.jaman.leetcodejava.medium;
2+
3+
import com.smlnskgmail.jaman.leetcodejava.support.TreeNode;
4+
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
// https://leetcode.com/problems/unique-binary-search-trees-ii/
9+
public class UniqueBinarySearchTreesII {
10+
11+
private final int input;
12+
13+
public UniqueBinarySearchTreesII(int input) {
14+
this.input = input;
15+
}
16+
17+
public List<TreeNode> solution() {
18+
return generate(1, input);
19+
}
20+
21+
private List<TreeNode> generate(int i, int j) {
22+
List<TreeNode> nodes = new ArrayList<>();
23+
if (i > j) {
24+
nodes.add(null);
25+
} else {
26+
for (int mid = i; mid <= j; mid++) {
27+
List<TreeNode> left = generate(i, mid - 1);
28+
List<TreeNode> right = generate(mid + 1, j);
29+
for (TreeNode l : left) {
30+
for (TreeNode r : right) {
31+
TreeNode node = new TreeNode(mid);
32+
node.left = l;
33+
node.right = r;
34+
nodes.add(node);
35+
}
36+
}
37+
}
38+
}
39+
return nodes;
40+
}
41+
42+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package com.smlnskgmail.jaman.leetcodejava.medium;
2+
3+
import com.smlnskgmail.jaman.leetcodejava.support.TreeNode;
4+
import org.junit.Test;
5+
6+
import java.util.List;
7+
8+
import static org.junit.Assert.assertEquals;
9+
import static org.junit.Assert.assertTrue;
10+
11+
public class UniqueBinarySearchTreesIITest {
12+
13+
@Test
14+
public void defaultTest() {
15+
List<TreeNode> correct = List.of(
16+
new TreeNode(
17+
1,
18+
null,
19+
new TreeNode(
20+
2,
21+
null,
22+
new TreeNode(3)
23+
)
24+
),
25+
new TreeNode(
26+
1,
27+
null,
28+
new TreeNode(
29+
3,
30+
new TreeNode(2),
31+
null
32+
)
33+
),
34+
new TreeNode(
35+
2,
36+
new TreeNode(1),
37+
new TreeNode(3)
38+
),
39+
new TreeNode(
40+
3,
41+
new TreeNode(
42+
1,
43+
null,
44+
new TreeNode(2)
45+
),
46+
null
47+
),
48+
new TreeNode(
49+
3,
50+
new TreeNode(
51+
2,
52+
new TreeNode(1),
53+
null
54+
),
55+
null
56+
)
57+
);
58+
List<TreeNode> solution = new UniqueBinarySearchTreesII(3).solution();
59+
assertEquals(correct.size(), solution.size());
60+
for (int i = 0; i < correct.size(); i++) {
61+
assertTrue(TreeNode.areEqual(correct.get(i), solution.get(i)));
62+
}
63+
}
64+
65+
}

0 commit comments

Comments
 (0)