164. 不同的二叉查找树 II
给出n,生成所有由1...n为节点组成的不同的二叉查找树
样例
给出n = 3,生成所有5种不同形态的二叉查找树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
解题思路:
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
# @paramn n: An integer
# @return: A list of root
def generateTrees(self, n):
# write your code here
#利用递归
return self.dfs(1, n)
def dfs(self, start, end):
if start > end:
return [None]
res = []
for val in range(start, end+1):
left = self.dfs(start, val - 1)
right = self.dfs(val+1, end)
for i in left:
for j in right:
root = TreeNode(val)
root.left = i
root.right = j
res.append(root)
return res