版权声明:本文为博主原创文章,未经博主允许不得转载。 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