95. Unique Binary Search Trees II Posted on 2020-08-20 | Edited on 2021-01-22 | Views: 1 LeetCode linkApproach: RecursionCopy1234567891011121314151617181920212223242526272829303132333435363738/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */class Solution { private List<TreeNode> genTreeList(int start,int end){ List<TreeNode> ls=new ArrayList<>(); if(start>end) ls.add(null); for(int i=start;i<=end;i++){ List<TreeNode> leftTreeList=genTreeList(start,i-1); List<TreeNode> rightTreeList=genTreeList(i+1,end); for(TreeNode left:leftTreeList){ for(TreeNode right:rightTreeList){ TreeNode root=new TreeNode(i); root.left=left; root.right=right; ls.add(root); } } } return ls; } public List<TreeNode> generateTrees(int n) { if(n==0) return new ArrayList<>(); else return genTreeList(1,n); }}