根据后续和中序遍历输出前序遍历c++
时间: 2024-04-29 12:23:59 浏览: 105
我们可以通过后续遍历和中序遍历来重建二叉树,然后再通过前序遍历输出二叉树的节点值。具体步骤如下:
1. 根据后续遍历找到根节点:后续遍历的最后一个节点就是二叉树的根节点。
2. 在中序遍历中找到根节点的位置:因为中序遍历是先遍历左子树,再遍历根节点,最后遍历右子树,所以根节点在中序遍历中的位置将中序遍历分成了左子树和右子树两个部分。
3. 根据中序遍历的左子树和右子树重建左子树和右子树:可以递归地重建左子树和右子树。
4. 输出前序遍历:先输出根节点的值,然后递归地输出左子树和右子树的前序遍历。
以下是示例代码实现:
```python
def buildTree(inorder, postorder):
if not inorder:
return None
root = TreeNode(postorder[-1])
i = inorder.index(root.val)
root.left = buildTree(inorder[:i], postorder[:i])
root.right = buildTree(inorder[i+1:], postorder[i:-1])
return root
def preorderTraversal(root):
if not root:
return []
return [root.val] + preorderTraversal(root.left) + preorderTraversal(root.right)
inorder = [9,3,15,20,7]
postorder = [9,15,7,20,3]
root = buildTree(inorder, postorder)
print(preorderTraversal(root)) # [3, 9, 20, 15, 7]
```
阅读全文