[95]不同的二叉搜索树 II

# 给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 
# 
#  
# 
#  
#  
#  示例 1: 
# 
#  
# 输入:n = 3
# 输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
#  
# 
#  示例 2: 
# 
#  
# 输入:n = 1
# 输出:[[1]]
#  
# 
#  
# 
#  提示: 
# 
#  
#  1 <= n <= 8 
#  
#  
#  
#  Related Topics 树 二叉搜索树 动态规划 回溯 二叉树 👍 1023 👎 0


# leetcode submit region begin(Prohibit modification and deletion)
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def generateTrees(self, n: int) -> List[TreeNode]:
        if n < 1:
            return []

        def helper(start, end):
            if end < start:
                return [None]
            res = []
            # 根节点
            for i in range(start, end + 1):
                # 所有左子树
                lefts = helper(start, i - 1)
                # 所有右子树
                rights = helper(i + 1, end)
                # 拼接
                for l in lefts:
                    for r in rights:
                        res.append(TreeNode(i, l, r))
            return res

        return helper(1, n)
# leetcode submit region end(Prohibit modification and deletion)

 

posted @ 2021-11-03 08:49  小熊猫不是小浣熊  阅读(25)  评论(0)    收藏  举报