前序ADCBEFGH 中序DABECGFH 写出后序
时间: 2024-01-15 12:19:47 浏览: 46
根据已知的前序序列和中序序列,我们可以通过递归的方式来求解后序遍历。具体步骤如下:
1. 首先,我们需要找到前序序列的第一个元素,即根节点。在这个例子中,根节点是A。
2. 然后,我们在中序序列中找到根节点的位置。在这个例子中,根节点A在中序序列中的位置是2。
3. 接下来,我们可以将中序序列分为左子树和右子树。子树的元素在根节点之前,右子树的元素在根节点之后。在这个例子中,左子树的中序序列是DABE,右子树的中序序列是CGFH。
4. 根据左子树的中序序列的长度,我们可以在前序序列中找到左子树的前序序列和右子树的前序序列。这个例子中,左子树的前序序列是DCBE,右子树的前序序列是FGH。
5. 然后,我们可以递归地对左子树和右子树进行相同的操作,直到序列为空。
6. 最后,我们可以得到后序序列。在这个例子中,后序序列是DBEGFHCJA。
以下是求解后序遍历的Python代码示例:
```python
def get_postorder(preorder, inorder):
if not preorder:
return []
root = preorder[0]
root_index = inorder.index(root)
left_inorder = inorder[:root_index]
right_inorder = inorder[root_index+1:]
left_preorder = preorder[1:1+len(left_inorder)]
right_preorder = preorder[1+len(left_inorder):]
left_postorder = get_postorder(left_preorder, left_inorder)
right_postorder = get_postorder(right_preorder, right_inorder)
return left_postorder + right_postorder + [root]
preorder = ['A', 'D', 'C', 'B', 'E', 'F', 'G', 'H', 'J']
inorder = ['D', 'A', 'B', 'E', 'C', 'G', 'F', 'H', 'J']
postorder = get_postorder(preorder, inorder)
print("Postorder traversal:", postorder) # 输出:['D', 'B', 'E', 'G', 'F', 'H', 'C', 'J', 'A']
```
阅读全文