1. class Solution:
    2. def generateTrees(self, n):
    3. """
    4. :type n: int
    5. :rtype: List[TreeNode]
    6. """
    7. def generate_trees(start, end):
    8. if start > end:
    9. return [None,]
    10. all_trees = []
    11. for i in range(start, end + 1): # pick up a root
    12. # all possible left subtrees if i is choosen to be a root
    13. left_trees = generate_trees(start, i - 1)
    14. # all possible right subtrees if i is choosen to be a root
    15. right_trees = generate_trees(i + 1, end)
    16. # connect left and right subtrees to the root i
    17. for l in left_trees:
    18. for r in right_trees:
    19. current_tree = TreeNode(i)
    20. current_tree.left = l
    21. current_tree.right = r
    22. all_trees.append(current_tree)
    23. return all_trees
    24. return generate_trees(1, n) if n else []