1
+ import java .util .ArrayList ;
2
+ import java .util .List ;
3
+
4
+ class TreeNode {
5
+ int val ;
6
+ TreeNode left ;
7
+ TreeNode right ;
8
+ TreeNode (int x ) {
9
+ val = x ;
10
+ }
11
+ }
12
+
13
+ // DP
14
+ class Solution {
15
+ public List <TreeNode > generateTrees (int n ) {
16
+ List <TreeNode >[] res = new List [n +1 ];
17
+ res [0 ] = new ArrayList <TreeNode >();
18
+ if (n == 0 ){
19
+ return res [0 ];
20
+ }
21
+ res [0 ].add (null );
22
+ res [1 ] = new ArrayList <TreeNode >();
23
+ res [1 ].add (new TreeNode (1 ));
24
+ for (int i =2 ; i <=n ; i ++){
25
+ res [i ] = new ArrayList <TreeNode >();
26
+ for (int j =1 ; j <=i ; j ++){
27
+ for (TreeNode nodeL : res [j - 1 ]){
28
+ for (TreeNode nodeR : res [i - j ]){
29
+ TreeNode node = new TreeNode (j );
30
+ node .left = nodeL ;
31
+ node .right = cloneTrees (nodeR , j );
32
+ res [i ].add (node );
33
+ }
34
+ }
35
+ }
36
+ }
37
+ return res [n ];
38
+ }
39
+
40
+ public TreeNode cloneTrees (TreeNode node , int offset ){
41
+ if (node == null ){
42
+ return null ;
43
+ }
44
+ TreeNode newNode = new TreeNode (node .val + offset );
45
+ newNode .left = cloneTrees (node .left , offset );
46
+ newNode .right = cloneTrees (node .right , offset );
47
+ return newNode ;
48
+ }
49
+ }
50
+
51
+ // Recursive
52
+ class Solution {
53
+ public List <TreeNode > generateTrees (int n ) {
54
+ return (n == 0 )?new ArrayList <TreeNode >(): geneTrees (1 , n );
55
+ }
56
+
57
+ public TreeNode formatNode (int val , TreeNode left , TreeNode right ){
58
+ TreeNode newNode = new TreeNode (val );
59
+ newNode .left = left ;
60
+ newNode .right = right ;
61
+ return newNode ;
62
+ }
63
+
64
+ public List <TreeNode > geneTrees (int lo , int hi ){
65
+ List <TreeNode > res = new ArrayList <TreeNode >();
66
+ for (int i =lo ; i <=hi ; i ++){
67
+ for (TreeNode nodeL : geneTrees (lo , i - 1 )){
68
+ for (TreeNode nodeR : geneTrees (i + 1 , hi )){
69
+ res .add (formatNode (i , nodeL , nodeR ));
70
+ }
71
+ }
72
+ }
73
+ if (res .isEmpty ()){
74
+ res .add (null );
75
+ }
76
+ return res ;
77
+ }
78
+ }
0 commit comments