题目
链接:https://leetcode-cn.com/problems/unique-binary-search-trees-ii/
代码python
# 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]:
def res_trees(mins,maxs):
if mins>maxs:
return [None]
froest=[] # 所有的树
for i in range (mins,maxs+1): # 选择第i个作为root,递归
little_tree = res_trees(mins,i-1)
big_tree = res_trees(i+1,maxs)
for j in little_tree:
for k in big_tree:
a_tree = TreeNode(i)
a_tree.left = j
a_tree.right = k
froest.append(a_tree)
return froest
if n == 0:
return []
if n==1:
return [TreeNode(1)]
else:
return res_trees(1,n)
思路:
利用递归,对于n个数,取第i个作为root,小于i的可以被归为子节点,大于i的归为右节点,左右节点既可以递归操作。