defgenerate(self, start, end): if start == end: return [None] if start == end - 1: return [TreeNode(start)] ans = [] for i inrange(start, end): left_trees = self.generate(start, i) right_trees = self.generate(i+1, end) for l in left_trees: for r in right_trees: head = TreeNode(i) head.left = l head.right = r ans.append(head) return ans