📅  最后修改于: 2023-12-03 15:12:36.214000             🧑  作者: Mango
该题目要求编写一个程序,读入一组先序遍历和中序遍历结果,并输出树的后序遍历结果。这是一个典型的树的遍历问题,需要用到递归算法。
根据先序遍历的结果,可以确定树的根节点;根据中序遍历的结果,可以确定树的左子树和右子树。对左子树和右子树分别递归处理,最终得到树的后序遍历结果。
具体实现可以参考以下步骤:
postorder(preorder, inorder, start, end, i)
,其中 preorder
和 inorder
分别为先序遍历和中序遍历的结果,start
和 end
分别表示当前处理的子树在中序遍历结果中的起始位置和结束位置,i
表示当前递归到的节点在先序遍历结果中的下标;postorder
函数,得到它们的后序遍历结果;下面是 Python 代码实现,实现了上述算法思路:
def postorder(preorder, inorder, start, end, i):
if start > end:
return []
root = preorder[i]
idx = inorder.index(root)
left = postorder(preorder, inorder, start, idx-1, i+1)
right = postorder(preorder, inorder, idx+1, end, i+1+len(left))
return left + right + [root]
preorder = ['F', 'B', 'A', 'D', 'C', 'E', 'G', 'I', 'H']
inorder = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I']
result = postorder(preorder, inorder, 0, len(preorder)-1, 0)
print(result)
执行以上代码会输出树的后序遍历结果 ['A', 'C', 'E', 'D', 'B', 'H', 'I', 'G', 'F']
。