# Definition for a binary tree node. classTreeNode(object): def__init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right
classSolution(object): defgenerateTrees(self, n): """ :type n: int :rtype: List[TreeNode] 题目分析: 根据给的例子可以看出,每个访问的情况都是使用的中序遍历,而且中序遍历得到的结果要满足[1,2,3] 二叉搜索树的性质: 根节点的左子树的元素都要小于根节点,根节点的右子树元素都要大于根节点 根据上面性质可以想到,对于每一个子树都满足上述的性质,因此可以将问题看成一个分而治之的问题, 解题思路: 采用分治的方法,选取一个节点作为根节点,前面的部分作为作为左子树,后面的部分作为右子树 针对左子树,同样采样上述方法,针对右子树同样采用上述方法 依次按照上述方法划分,然后在进行拼接即可 """ if n == 0: return [] defgenerateSearchTree(start,end): if start > end: return [None,] allTress = [] for i in range(start,end+1): # 针对所有情况进行枚举,因为每个节点都可以作为根节点 # 对左子树建立二叉搜索树 leftTree = generateSearchTree(start,i-1) # 获得所有的左子树的可能