给你一个二叉树的层序遍历和中序遍历,输出它的先序遍历序列和后序遍历序列
时间: 2024-05-04 22:16:42 浏览: 110
对所建立的二叉树分别进行先序、中序和后序遍历,并输出结果。
4星 · 用户满意度95%
好的,给定二叉树的层序遍历和中序遍历,我们可以通过重建二叉树的方式来得到先序遍历和后序遍历序列。
先用中序遍历的结果确定根节点,然后在层序遍历中找到根节点,将层序遍历结果分为左子树和右子树。重复以上步骤,直到所有节点都添加到树中。
最后,我们可以通过深度优先搜索的方式得到先序遍历和后序遍历序列。
以下是代码实现:
```python
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(inorder, levelorder):
if not inorder:
return None
# 根节点
root = TreeNode(levelorder[0])
index = inorder.index(root.val)
# 左子树的中序遍历结果
left_inorder = inorder[:index]
# 右子树的中序遍历结果
right_inorder = inorder[index+1:]
# 左子树的层序遍历结果
left_levelorder = [x for x in levelorder if x in left_inorder]
# 右子树的层序遍历结果
right_levelorder = [x for x in levelorder if x in right_inorder]
# 递归构建左子树和右子树
root.left = buildTree(left_inorder, left_levelorder)
root.right = buildTree(right_inorder, right_levelorder)
return root
def preorderTraversal(root):
if not root:
return []
return [root.val] + preorderTraversal(root.left) + preorderTraversal(root.right)
def postorderTraversal(root):
if not root:
return []
return postorderTraversal(root.left) + postorderTraversal(root.right) + [root.val]
inorder = [9, 3, 15, 20, 7]
levelorder = [3, 9, 20, 15, 7]
root = buildTree(inorder, levelorder)
preorder = preorderTraversal(root)
postorder = postorderTraversal(root)
print("先序遍历序列:", preorder)
print("后序遍历序列:", postorder)
```
输出结果为:
```
先序遍历序列: [3, 9, 20, 15, 7]
后序遍历序列: [9, 15, 7, 20, 3]
```
阅读全文