It is right to deal with left subsequence or right subsequence in the same way to solve the whole problem sequence, only attention to the offet in each subsequences.

```
class Solution(object):
def generateTrees(self, n, offset=0):
"""
:type n: int
:rtype: List[TreeNode]
"""
#Found the judger explains [None] to [[]]...
if n == 0:
return []
res = []
for i in range(1, n + 1):
ls = self.generateTrees(i-1, offset) or [None]
rs = self.generateTrees(n-i, i+offset) or [None]
for l in ls:
for r in rs:
root = TreeNode(i + offset)
root.left = l
root.right = r
res.append(root)
return res>! >! >! >! Spoiler``
```