1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| class Solution { public List<TreeNode> generateTrees(int n) { return generateTrees(1, n); }
private List<TreeNode> generateTrees(int start, int end) { List<TreeNode> treeList = new ArrayList<>(); if (start > end) { treeList.add(null); return treeList; }
for (int root = start; root <= end; root++) { List<TreeNode> leftTrees = generateTrees(start, root - 1); List<TreeNode> rightTrees = generateTrees(root + 1, end);
for (TreeNode leftTreeRoot : leftTrees) { for (TreeNode rightTreeRoot : rightTrees) { TreeNode rootNode = new TreeNode(root); rootNode.left = leftTreeRoot; rootNode.right = rightTreeRoot; treeList.add(rootNode); } } }
return treeList; } }
|
References
95. Unique Binary Search Trees II