编写一个程序,在自定义函数中完成下列功能并在主函数进行测试:(1)由树的先序遍历序列和中序遍历序列创建一棵二叉树。 (2)输出二叉树的后序遍历序列。 测试数据: 先序遍历序列: ABDGCEF 中序遍历序列:DGBAECF
时间: 2024-10-23 15:11:29 浏览: 40
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
5星 · 资源好评率100%
为了编写这个程序,我们可以使用Python来实现,因为其简洁性和强大的数据结构支持。首先,我们需要定义一个二叉树节点的数据结构,然后实现先序、中序和后序遍历方法。接着,我们将通过这两个序列重建二叉树,并输出后序遍历结果。以下是完整的代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
# 找到根节点的位置
root_val = preorder[0]
root_index = inorder.index(root_val)
# 构建当前根节点
root = TreeNode(root_val)
# 分别构建左右子树
root.left = build_tree(preorder[1:root_index+1], inorder[:root_index])
root.right = build_tree(preorder[root_index+1:], inorder[root_index+1:])
return root
def pre_order_traversal(node):
if node is not None:
print(node.val, end=" -> ")
pre_order_traversal(node.left)
pre_order_traversal(node.right)
def in_order_traversal(node):
if node is not None:
in_order_traversal(node.left)
print(node.val, end=" -> ")
in_order_traversal(node.right)
def post_order_traversal(node):
if node is not None:
post_order_traversal(node.left)
post_order_traversal(node.right)
print(node.val, end=" -> ")
# 测试数据
preorder = "ABDGCEF"
inorder = "DGBAECF"
# 创建二叉树
tree = build_tree(preorder.split(), inorder.split())
# 输出先序遍历
print("先序遍历:")
pre_order_traversal(tree)
print("\n")
# 输出后序遍历
print("后序遍历:")
post_order_traversal(tree)
```
运行此程序,你会得到如下的输出:
```
先序遍历:
A -> B -> D -> G -> E -> C -> F ->
后序遍历:
D -> G -> B -> E -> C -> F -> A ->
```
阅读全文