https://leetcode-cn.com/problems/unique-binary-search-trees-ii/
注意审题:
- 这是个二叉搜索树,利用这个性质解题就不难。
- 需要返回的是树的list,肯定要在某个节点建树。
利用dfs的时候,想了半天不会存和建树,最后看了答案才恍然大悟,以 i 为root的时候,利用dfs获得所有左子树和右子树。
递归出口返回什么也很纠结,返回None 和[]都是错的,要返回[None]
因为你要接一个空节点的时候,这个空节点是list从遍历过来的,所以返回[None]是正确的。
class Solution:def generateTrees(self, n: int) -> List[TreeNode]:# 审题 二叉**搜索**树# 返回的是树的list!if not n:return []def dfs(start,end):if start>end:return [None]ans=[]for i in range(start,end+1):lefttree=dfs(start,i-1)righttree=dfs(i+1,end)for l in lefttree:for r in righttree:cur=TreeNode(i)cur.left=lcur.right=rans.append(cur)return ansreturn dfs(1,n)
