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