
这题和上一题不同之处就是要把树保存下来(层遍历),解法上没什么本质改变,加一些东西就行:
# 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)
本文介绍了一种使用递归和缓存技术生成所有可能的不同形态的二叉搜索树的方法。通过定义一个二叉树节点类和解决方案类,实现了从1到n个节点的所有可能的二叉搜索树的生成。此算法利用了动态规划的思想,通过函数fuc(i, j)来生成从i到j的二叉搜索树,确保了效率。
273

被折叠的 条评论
为什么被折叠?



