1
# Runtime: 73 ms (Top 74.11%) | Memory: 15.7 MB (Top 42.55%)
2
# Definition for a binary tree node.
3
# class TreeNode:
4
# def __init__(self, val=0, left=None, right=None):
5
# self.val = val
6
# self.left = left
7
# self.right = right
8
class Solution:
9

10
def generateTrees(self, n: int) -> List[Optional[TreeNode]]:
11
# define a sorted list of the numbers, for each num in that list , leftvalues
12
# are left tree and right val are rightree, then for each number create a tree
13
# assign the left and right to that root and append the root to the ans
14
nums = list(range(1, n + 1))
15

16
def dfs(nums):
17
if not nums:
18
return [None]
19
ans = []
20
for i in range(len(nums)):
21
leftTrees = dfs(nums[:i])
22
rightTrees = dfs(nums[i + 1 :])
23

24
for l in leftTrees:
25
for r in rightTrees:
26
root = TreeNode(nums[i])
27
root.left = l
28
root.right = r
29
ans.append(root)
30
return ans
31

32
return dfs(nums)

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0