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.
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
Solution:
# 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 generateTrees(self, n): return self.generateTrees2(1,n) def generateTrees2(self, begin, end): solution = [] if begin > end: solution.append(None) return solution for root in range(begin,end+1): leftNodes = self.generateTrees2(begin, root-1) rightNodes = self.generateTrees2(root+1, end) for leftNode in leftNodes: for rightNode in rightNodes: node = TreeNode(root) node.left = leftNode node.right = rightNode solution.append(node) return solution