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 }

 

posted @ 2018-09-18 10:57  jasoncool1  阅读(104)  评论(0编辑  收藏  举报