class Solution { public List<TreeNode> generateTrees(int n) { if(n==0) return new ArrayList<TreeNode>(); return generateTrees(1, n); } private List<TreeNode> generateTrees(int i, int j) { List<TreeNode> res=new ArrayList<TreeNode>(); if(i>j) res.add(null); else { for(int k=i;k<=j;k++) { List<TreeNode> left=generateTrees(i,k-1); List<TreeNode> right=generateTrees(k+1,j); for(TreeNode l:left) for(TreeNode r:right) { TreeNode node=new TreeNode(k); node.left=l; node.right=r; res.add(node); } } } return res; } }