95. 不同的二叉搜索树 II

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=l
                        cur.right=r
                        ans.append(cur)
            return ans
        return dfs(1,n)

你可能感兴趣的:(95. 不同的二叉搜索树 II)