Skip to content

Commit 8695db4

Browse files
committed
(#96)UniqueBinarySearchTrees
1 parent 6ffad3f commit 8695db4

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode(int x) { val = x; }
8+
* }
9+
*/
10+
class Solution {
11+
public List<TreeNode> generateTrees(int n) {
12+
return helper(1, n);
13+
}
14+
15+
private List<TreeNode> helper(int min, int max){
16+
List<TreeNode> res = new ArrayList<TreeNode>();
17+
if(min > max) return res;
18+
19+
for(int rt = min; rt <= max; rt++){
20+
List<TreeNode> leftList = helper(min, rt - 1);
21+
List<TreeNode> rightList = helper(rt + 1, max);
22+
23+
if(leftList.size() == 0 && rightList.size() == 0){
24+
TreeNode root = new TreeNode(rt);
25+
res.add(root);
26+
}
27+
else if(leftList.size() == 0){
28+
for(TreeNode node : rightList){
29+
TreeNode root = new TreeNode(rt);
30+
root.right = node;
31+
res.add(root);
32+
}
33+
}
34+
else if(rightList.size() == 0){
35+
for(TreeNode node : leftList){
36+
TreeNode root = new TreeNode(rt);
37+
root.left = node;
38+
res.add(root);
39+
}
40+
}
41+
else{
42+
for(TreeNode right : rightList){
43+
for(TreeNode left : leftList){
44+
TreeNode root = new TreeNode(rt);
45+
root.right = right;
46+
root.left = left;
47+
res.add(root);
48+
}
49+
}
50+
}
51+
}
52+
53+
return res;
54+
}
55+
}

0 commit comments

Comments
 (0)