这题和上一题不同之处就是要把树保存下来(层遍历),解法上没什么本质改变,加一些东西就行:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def generateTrees(self, n: int) -> List[TreeNode]:
if n == 0:
return []
import functools
@functools.lru_cache(None)
def fuc(i,j):
if i > j: return [None]
if i == j: return [TreeNode(j)]
trees = []
for k in range(i,j+1):
left = fuc(i,k-1)
right = fuc(k+1,j)
for elm1 in left:
for elm2 in right:
t = TreeNode(k)
t.left = elm1
t.right = elm2
trees.append(t)
return trees
return fuc(1,n)