题目描述:
题解:
<1>1-n范围内的任何i值可以作为根节点。
<2>1-i-1作为左子树,i+1-n作为右子树。
1.构造函数generateBST(start,end)返回由start-end组成的所有BST:
选择start-end中一个值i作为根结点。
调用generate(start,i-1)返回所有左子树组合,调用generate(i+1,end)返回所有右子树组合。
i作为根结点,generate(start,i-1)中选择一种作为左子树,generate(i+1,end)选择一种作为右子。
树。
class Solution(object): def generateTrees(self, n): return self.generateBST(1,n) def generateBST(self,start,end): res = [] if start>end: res.append(None) return res for i in range(start,end+1): left = self.generateBST(start,i-1) right = self.generateBST(i+1,end) for left_tree in left: for right_tree in right: root = TreeNode(i) root.left = left_tree root.right = right_tree res.append(root) return res