LeetCode95题
首先明确一点,题目中返回的是一个列表,列表的每一个元素都是根节点的地址值。。一开始有点懵,以为是弄一个二维列表就可以了,还纳闷为啥要用树。。。
步入正题,整个问题可以从0到n,n个数字为根节点,每一次i作为根节点,都有左子树和右子树,左子树有从0到i-1分别作为根节点,每一个根节点j又有左子树和右子树。。。大家已经大概看到了,这是一个递归方法。
在递归过程,我们每次吧树的左子树和右子树送到递归函数里。退出递归的条件:当没有元素的时候,返回一个[None]。最后在循环合成该树,并把他放入数组中,完成。
# 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 []
def build_Trees(left,right):
all_trees=[]
if(left>right):
return [None]
for i in range(left,right+1):
left_trees=build_Trees(left,i-1)
right_trees=build_Trees(i+1,right)
for l in left_trees:
for r in right_trees:
cur_tree=TreeNode(i)
cur_tree.left=l
cur_tree.right=r
all_trees.append(cur_tree)
return all_trees
res=build_Trees(1,n)
return res