给定一个整数 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] ] 解释: 以上的输出对应以下 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def generateTrees(self, n):
"""
:type n: int
:rtype: List[TreeNode]
"""
if n == 0:return []
res = self.dfs(1,n)
return res
def dfs(self,start,end):
cr = []
if start > end:
return [None]
if start == end:
node = TreeNode(start)
cr.append(node)
return cr
for i in range(start,end+1):
ln = self.dfs(start,i-1)
rn = self.dfs(i+1,end)
for l in ln:
for r in rn:
node = TreeNode(i)
node.left = l
node.right = r
cr.append(node)
return cr