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
| class Solution { public List<TreeNode> generateTrees(int n) { return helper(1, n); }
private List<TreeNode> helper(int left, int right) { List<TreeNode> ans = new ArrayList<>(); if (left > right) { ans.add(null); return ans; } for (int i = left; i <= right; i++) { List<TreeNode> leftSubList = helper(left, i - 1); List<TreeNode> rightSubList = helper(i + 1, right); for (TreeNode leftSub : leftSubList) { for (TreeNode rightSub : rightSubList) { TreeNode currRoot = new TreeNode(i); currRoot.left = leftSub; currRoot.right = rightSub; ans.add(currRoot); }
} } return ans; } }
|