# Given an integer n, generate all structurally unique BST's (binary search trees) that store values 1...n.## For example,# Given n = 3, your program should return all 5 unique BST's shown below.## 1 3 3 2 1# \ / / / \ \# 3 2 1 1 3 2# / / \ \# 2 1 2 3
AC
classTreeNode():def__init__(self, x):
self.val = x
self.left = None
self.right = NoneclassSolution():defgenerateTrees(self, n):return self.buildTree(0, n)
defbuildTree(self, n1, n2):if n1==n2:
return [None]
if n1+1 == n2:
node = TreeNode(n1+1)
node.left = None
node.right = Nonereturn [node]
else:
results = []
for x in range(n1, n2):
left_list = self.buildTree(n1, x)
right_list = self.buildTree(x+1, n2)
for left in left_list:
for right in right_list:
node = TreeNode(x+1)
node.left = left
node.right = right
results.append(node)
return results
classTreeNode():def__init__(self, x):
self.val = x
self.left = None
self.right = NoneclassSolution():defgenerateTrees(self, n):return self.generateTreesRecu(1, n)
defgenerateTreesRecu(self, low, high):
result = []
if low > high:
result.append(None)
for i in range(low, high + 1):
left = self.generateTreesRecu(low, i - 1)
right = self.generateTreesRecu(i + 1, high)
for j in left:
for k in right:
cur = TreeNode(i)
cur.left = j
cur.right = k
result.append(cur)
return result
if __name__ == "__main__":
print(Solution().generateTrees(3))