假设二叉树采用二叉链存储,每个结点值为单个字符, 并且所有结点值不相同。编写一个实验程序, 由二叉树的中序序列和后序序列构造二叉树, 实现查找、求高度、先序遍历、中序遍历、后序遍历算法和层次遍历算法,用相关数据进行测试,包括主程序
时间: 2023-07-16 20:13:42 浏览: 109
以下是一个基于Python的实现:
```python
# 定义二叉树结点类
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# 根据中序和后序遍历序列构建二叉树
def build_tree(inorder, postorder):
if not inorder or not postorder:
return None
root = Node(postorder.pop())
index = inorder.index(root.data)
root.right = build_tree(inorder[index + 1:], postorder)
root.left = build_tree(inorder[:index], postorder)
return root
# 递归查找二叉树结点
def search_node(root, key):
if not root:
return None
if root.data == key:
return root
result = search_node(root.left, key)
if not result:
result = search_node(root.right, key)
return result
# 递归求二叉树高度
def get_height(root):
if not root:
return 0
left_height = get_height(root.left)
right_height = get_height(root.right)
return max(left_height, right_height) + 1
# 递归先序遍历二叉树
def preorder_traversal(root):
if not root:
return
print(root.data, end=' ')
preorder_traversal(root.left)
preorder_traversal(root.right)
# 递归中序遍历二叉树
def inorder_traversal(root):
if not root:
return
inorder_traversal(root.left)
print(root.data, end=' ')
inorder_traversal(root.right)
# 递归后序遍历二叉树
def postorder_traversal(root):
if not root:
return
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.data, end=' ')
# 层次遍历二叉树
def level_traversal(root):
if not root:
return
queue = [root]
while queue:
node = queue.pop(0)
print(node.data, end=' ')
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
# 测试样例
inorder = ['D', 'B', 'E', 'A', 'F', 'C']
postorder = ['D', 'E', 'B', 'F', 'C', 'A']
root = build_tree(inorder, postorder)
print('二叉树的高度:', get_height(root))
print('先序遍历序列:', end=' ')
preorder_traversal(root)
print('\n中序遍历序列:', end=' ')
inorder_traversal(root)
print('\n后序遍历序列:', end=' ')
postorder_traversal(root)
print('\n层次遍历序列:', end=' ')
level_traversal(root)
```
输出结果如下:
```
二叉树的高度: 3
先序遍历序列: A B D E C F
中序遍历序列: D B E A F C
后序遍历序列: D E B F C A
层次遍历序列: A B C D E F
```
阅读全文