leectcode95. 不同的二叉搜索树 II

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_36811967/article/details/88312871

给定一个整数 n,生成所有由 1 … n 为节点所组成的二叉搜索树。

示例:
输入: 3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]

leetcoode96. 不同的二叉搜索树的进阶版,找根节点,它左边的为左节点,右边的为右节点,找到左右子树的根节点就行:

# 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 []
        return self.helper(1, n)

    def helper(self, start, end):
        res = []
        if start > end:
            return [None]
        for i in range(start, end+1):  # 找个根节点
            left = self.helper(start,i-1)
            right = self.helper(i+1, end)
            for one_left in left:
                for one_right in right:
                    # 从左右各找一个节点作为左右子树的根节点
                    node = TreeNode(i)
                    node.left = one_left
                    node.right = one_right
                    res.append(node)
        return res

猜你喜欢

转载自blog.csdn.net/sinat_36811967/article/details/88312871