您的位置:首页 > 产品设计 > UI/UE

leetcode: 95. Unique Binary Search Trees II [✗]

2017-11-22 10:23 435 查看

Problem

# 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

class TreeNode():
def __init__(self, x):
self.val = x
self.left = None
self.right = None

class Solution():
def generateTrees(self, n):
return self.buildTree(0, n)

def buildTree(self, n1, n2):
if n1==n2:
return [None]
if n1+1 == n2:
node = TreeNode(n1+1)
node.left = None
node.right = None
return [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

class TreeNode():
def __init__(self, x):
self.val = x
self.left = None
self.right = None

class Solution():
def generateTrees(self, n):
return self.generateTreesRecu(1, n)

def generateTreesRecu(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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: