def recursion(self, root, left, right, inorderDict, preorder): # step 1 : 判定 是否 到达 叶子节点 if left > right: return # step 2 : 构建根节点 node = Tree(preorder[root]) # step 3 : 搜索 根节点 在 中序遍历 中 的位置 index = inorderDict[preorder[root]] # step 4 : 分割 左右子树 node.left = self.recursion(root + 1, left, index - 1, inorderDict, preorder) node.right = self.recursion(index - left + root + 1, index + 1, right, inorderDict, preorder) return node
def left_right(left, right): if left > right: return [None] if (left, right) in dct: return dct[(left, right)] ret = [] for i in range(left, right + 1): left_lst = left_right(left, i - 1) right_lst = left_right(i + 1, right) for L in left_lst: for R in right_lst: app_Tree = Tree(i) app_Tree.left = L app_Tree.right = R ret.append(app_Tree) dct[(left, right)] = ret return ret