File tree Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Expand file tree Collapse file tree 1 file changed +45
-0
lines changed Original file line number Diff line number Diff line change 1+ /**
2+ * Given n, generate all structurally unique BST's (binary search trees) that store values 1...n.
3+ *
4+ * For example,
5+ * Given n = 3, your program should return all 5 unique BST's shown below.
6+ *
7+ * 1 3 3 2 1
8+ * \ / / / \ \
9+ * 3 2 1 1 3 2
10+ * / / \ \
11+ * 2 1 2 3
12+ */
13+
14+ import java .util .ArrayList ;
15+
16+ public class UniqueBinarySearchTreesII {
17+ public ArrayList <TreeNode > generateTrees (int n ) {
18+ return buildBST (1 , n );
19+ }
20+
21+ private ArrayList <TreeNode > buildBST (int min , int max ) {
22+ ArrayList <TreeNode > ret = new ArrayList <TreeNode >();
23+ if (min > max ) {
24+ ret .add (null );
25+ return ret ;
26+ }
27+ if (min == max ) {
28+ ret .add (new TreeNode (min ));
29+ return ret ;
30+ }
31+ for (int i = min ; i <= max ; i ++) {
32+ ArrayList <TreeNode > leftTrees = buildBST (min , i - 1 );
33+ ArrayList <TreeNode > rightTrees = buildBST (i + 1 , max );
34+ for (TreeNode l : leftTrees ) {
35+ for (TreeNode r : rightTrees ) {
36+ TreeNode root = new TreeNode (i );
37+ root .left = l ;
38+ root .right = r ;
39+ ret .add (root );
40+ }
41+ }
42+ }
43+ return ret ;
44+ }
45+ }
You can’t perform that action at this time.
0 commit comments