class Solution:def generateTrees(self, n):""":type n: int:rtype: List[TreeNode]"""def generate_trees(start, end):if start > end:return [None,]all_trees = []for i in range(start, end + 1): # pick up a root# all possible left subtrees if i is choosen to be a rootleft_trees = generate_trees(start, i - 1)# all possible right subtrees if i is choosen to be a rootright_trees = generate_trees(i + 1, end)# connect left and right subtrees to the root ifor l in left_trees:for r in right_trees:current_tree = TreeNode(i)current_tree.left = lcurrent_tree.right = rall_trees.append(current_tree)return all_treesreturn generate_trees(1, n) if n else []
