def reconstruct_tree(inorder, preorder): if inorder is None or preorder is None or len(inorder) < 1 or len( preorder) < 1: return None current = preorder[0] inorder_left = [] preorder_left = [] for i in range(0, len(inorder)): if inorder[i] == current: break inorder_left.append(inorder[i]) preorder_left.append(preorder[i + 1]) inorder_right = [] preorder_right = [] for j in range(i + 1, len(inorder)): inorder_right.append(inorder[j]) preorder_right.append(preorder[j]) root = TreeNode(preorder[0]) root.set_left(reconstruct_tree(inorder_left, preorder_left)) root.set_right(reconstruct_tree(inorder_right, preorder_right)) return root