diff --git a/UniqueBinarySearchTrees2.java b/UniqueBinarySearchTrees2.java new file mode 100644 index 00000000..c05f3585 --- /dev/null +++ b/UniqueBinarySearchTrees2.java @@ -0,0 +1,36 @@ +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode(int x) { val = x; } + * } + */ +class Solution { + public List generateTrees(int n) { + if(n == 0) return new LinkedList(); + return generateSubtrees(1, n); + } + + public List generateSubtrees(int s, int e) { + List res = new LinkedList<>(); + if(s > e) { + res.add(null); + return res; + } + for(int i = s; i <= e; i++) { + List left = generateSubtrees(s, i-1); + List right = generateSubtrees(i+1, e); + for(TreeNode l: left) { + for(TreeNode r: right) { + TreeNode n = new TreeNode(i); + n.left = l; + n.right = r; + res.add(n); + } + } + } + return res; + } +}