首先,从记事本中依次读取每一行通讯录内容,将读取的所有教师信息按照年龄构建成二叉排序树,如图8-2所示。然后,分别通过对二叉排序树的先序遍历显示所有教师信息,通过二叉排序树的后序遍历按照姓名查询某位教师通讯信息,通过二叉排序树后序遍历按照部门查询该部门所有教师的通讯信息;最后,通过二叉排序树的中序遍历输出青年教师(≤35岁)通讯信息,遍历过程中,如果某个结点的年龄大于35岁,那么不再需要遍历该结点的右子树。
时间: 2024-02-25 07:52:09 浏览: 138
这个问题涉及到二叉排序树的知识。以下是一个简单的示例代码,可以实现上述要求:
```python
# 定义二叉排序树的结点类
class TreeNode:
def __init__(self, contact):
self.contact = contact
self.left = None
self.right = None
# 将通讯录信息构建成二叉排序树
def build_bst():
with open('contacts.txt', 'r') as f:
lines = f.readlines()
root = None
for line in lines:
info = line.strip().split(',')
contact = {
'name': info[0],
'department': info[1],
'age': int(info[2]),
'phone': info[3]
}
node = TreeNode(contact)
if root is None:
root = node
else:
current = root
while True:
if node.contact['age'] < current.contact['age']:
if current.left is None:
current.left = node
break
else:
current = current.left
else:
if current.right is None:
current.right = node
break
else:
current = current.right
return root
# 先序遍历二叉排序树,显示所有教师信息
def preorder_traversal(root):
if root is not None:
print(root.contact)
preorder_traversal(root.left)
preorder_traversal(root.right)
# 后序遍历二叉排序树,按照姓名查询某位教师通讯信息
def postorder_traversal_by_name(root, name):
if root is None:
return
postorder_traversal_by_name(root.left, name)
postorder_traversal_by_name(root.right, name)
if root.contact['name'] == name:
print(root.contact)
# 后序遍历二叉排序树,按照部门查询该部门所有教师的通讯信息
def postorder_traversal_by_department(root, department):
if root is None:
return
postorder_traversal_by_department(root.left, department)
postorder_traversal_by_department(root.right, department)
if root.contact['department'] == department:
print(root.contact)
# 中序遍历二叉排序树,输出青年教师(≤35岁)通讯信息
def inorder_traversal(root):
if root is not None:
inorder_traversal(root.left)
if root.contact['age'] <= 35:
print(root.contact)
inorder_traversal(root.right.left)
else:
inorder_traversal(root.right)
# 构建二叉排序树并进行各种遍历
root = build_bst()
print('所有教师信息:')
preorder_traversal(root)
print('')
name = '张三'
print('姓名为{}的教师信息:'.format(name))
postorder_traversal_by_name(root, name)
print('')
department = '教师'
print('部门为{}的教师信息:'.format(department))
postorder_traversal_by_department(root, department)
print('')
print('青年教师(≤35岁)信息:')
inorder_traversal(root)
```
你可以根据实际情况对代码进行修改和完善。当然,还有很多其他的方法可以实现这个功能,这里只是提供一个简单的示例。
阅读全文