def generateTrees(self, n): if n == 0: return [] def helper(start, end): ls = [] if start > end: ls.append(None) return ls if start == end: ls.append(TreeNode(start)) return ls for i in range(start, end + 1): left = helper(start, i - 1) right = helper(i + 1, end) for lnode in left: for rnode in right: root = TreeNode(i) root.left = lnode root.right = rnode ls.append(root) return ls return helper(1, n)