95. Unique Binary Search Trees II
分成两边, left right排列组合加到root, lo==hi就返回当前值
1 class Solution { 2 public List<TreeNode> generateTrees(int n) { 3 if(n == 0) return (new ArrayList<>()); 4 return generate(1, n); 5 6 } 7 8 public List<TreeNode> generate(int lo, int hi) { 9 List<TreeNode> list = new ArrayList<>(); 10 if(lo > hi) { 11 list.add(null); 12 return list; 13 } 14 if(lo == hi) { 15 list.add(new TreeNode(lo)); 16 return list; 17 } 18 19 for(int i = lo; i <= hi; i++) { 20 List<TreeNode> left = generate(lo, i-1); 21 List<TreeNode> right = generate(i+1, hi); 22 23 for(TreeNode lNode: left) { 24 for(TreeNode rNode: right) { 25 TreeNode root = new TreeNode(i); 26 root.left = lNode; 27 root.right = rNode; 28 list.add(root); 29 } 30 } 31 32 } 33 return list; 34 } 35 }