Given 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
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
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.
这道题目的做法和之前的unique BST略有不同,但主体思想是一致的。选定一个点作为根,依次产生可行的子树,然后把解加到最后的解里面。
The way to solve this problem is to find a root in the given number then construct valid left and right subtrees then append it to the solution. valid condition is left<mid<right
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @return a list of tree node
def getTree(self,start,end):
if start>end:
return [None]
solution=[]
for rootval in range(start,end+1):
left=self.getTree(start,rootval-1)
right=self.getTree(rootval+1,end)
for i in left:
for j in right:
root=TreeNode(rootval)
root.left=i
root.right=j
solution.append(root)
return solution
def generateTrees(self, n):
return self.getTree(1,n)