class Solution(object):
def _gen(self, cache, start, end):
if start>end:
return [None,]
if (start,end) in cache:
return cache[start,end]
ret=[]
for i in xrange(start, end+1):
leftNodes=self._gen(cache, start, i-1)
cache[(start, i-1)] = leftNodes
rightNodes=self._gen(cache, i+1, end)
cache[(i+1, end)] = rightNodes
for leftn in leftNodes:
for rightn in rightNodes:
node = TreeNode(i)
node.left=leftn
node.right=rightn
ret.append(node)
cache[(start, end)] = ret
return ret
def generateTrees(self, n):
"""
:type n: int
:rtype: List[TreeNode]
"""
if n==0:
return []
cache={}
return self._gen(cache, 1, n)