给出一棵二叉树的前序遍历 和中序遍历 ,求它的后序遍历 。
时间: 2023-12-14 17:51:43 浏览: 85
假设二叉树的前序遍历为 preOrder[],中序遍历为 inOrder[],那么可以通过递归的方式求出后序遍历。
步骤如下:
1. 如果 preOrder[] 和 inOrder[] 的长度都为 0,则返回空。
2. 从 preOrder[] 中取出第一个元素,即为根节点。将该元素从 preOrder[] 中删除,并在 inOrder[] 中找到它的位置,将 inOrder[] 分成左子树和右子树两部分。
3. 对左子树进行递归,返回左子树的后序遍历序列,对右子树进行递归,返回右子树的后序遍历序列。
4. 将根节点加入左子树的后序遍历序列和右子树的后序遍历序列的末尾。
5. 返回左子树和右子树的后序遍历序列的拼接结果。
Python 代码实现如下:
```python
def postOrder(preOrder, inOrder):
if not preOrder or not inOrder:
return []
rootVal = preOrder[0]
rootIndex = inOrder.index(rootVal)
leftInOrder = inOrder[:rootIndex]
rightInOrder = inOrder[rootIndex+1:]
leftPreOrder = preOrder[1:1+len(leftInOrder)]
rightPreOrder = preOrder[1+len(leftInOrder):]
leftPostOrder = postOrder(leftPreOrder, leftInOrder)
rightPostOrder = postOrder(rightPreOrder, rightInOrder)
return leftPostOrder + rightPostOrder + [rootVal]
```
例如,对于如下二叉树:
```
1
/ \
2 3
/ \
4 5
```
前序遍历为 [1, 2, 3, 4, 5],中序遍历为 [2, 1, 4, 3, 5],则后序遍历为 [2, 4, 5, 3, 1]。
阅读全文