二叉树的先序中序推后序
时间: 2023-07-21 19:11:15 浏览: 78
好的,这个问题我可以回答。假设二叉树的先序遍历结果为preorder,中序遍历结果为inorder,那么我们可以通过以下步骤来推导出后序遍历结果:
1. 如果preorder和inorder都为空,直接返回。
2. 取出preorder的第一个元素,即为根节点。假设根节点的值为rootValue。
3. 在inorder中查找rootValue所在的位置,假设其位置为inorderIndex。
4. 递归处理左子树。具体来说,先序遍历结果为preorder[1:inorderIndex+1],中序遍历结果为inorder[:inorderIndex]。
5. 递归处理右子树。具体来说,先序遍历结果为preorder[inorderIndex+1:],中序遍历结果为inorder[inorderIndex+1:]。
6. 将根节点的值rootValue添加到后序遍历结果的末尾。
7. 返回后序遍历结果。
下面是Python代码实现:
```
def buildTree(preorder, inorder):
if not preorder or not inorder:
return []
rootValue = preorder[0]
inorderIndex = inorder.index(rootValue)
leftPreorder = preorder[1:inorderIndex+1]
leftInorder = inorder[:inorderIndex]
rightPreorder = preorder[inorderIndex+1:]
rightInorder = inorder[inorderIndex+1:]
leftPostorder = buildTree(leftPreorder, leftInorder)
rightPostorder = buildTree(rightPreorder, rightInorder)
return leftPostorder + rightPostorder + [rootValue]
```
希望我的回答可以帮助到你!
阅读全文