Sử dụng cây tìm kiếm nhị phân để viết chương trình quản lí danh sách học sinh
Giải Chuyên đề Tin 12 Bài 10: Thực hành tổng hợp với cây tìm kiếm nhị phân - Kết nối tri thức
Vận dụng 1 trang 48 Chuyên đề Tin học 12: Sử dụng cây tìm kiếm nhị phân để viết chương trình quản lí danh sách học sinh của một lớp. Thông tin mỗi học sinh gồm mã (duy nhất), tên đầy đủ, ngày sinh. Chương trình cho phép thêm mới thông tin các học sinh, in danh sách sắp xếp theo mã từ nhỏ đến lớn và từ lớn đến nhỏ, tìm kiếm học sinh theo mã.
Lời giải:
Bản phác thảo Python mẫu cho chương trình quản lí danh sách học sinh của một lớp sử dụng cây tìm kiếm nhị phân:
class Student:
def __init__(self, student_id, full_name, date_of_birth):
self.student_id = student_id
self.full_name = full_name
self.date_of_birth = date_of_birth
class TreeNode:
def __init__(self, student):
self.student = student
self.left = None
self.right = None
class StudentDatabase:
def __init__(self):
self.root = None
def insert(self, student):
self.root = self._insert_recursive(self.root, student)
def _insert_recursive(self, root, student):
if root is None:
return TreeNode(student)
if student.student_id < root.student.student_id:
root.left = self._insert_recursive(root.left, student)
elif student.student_id > root.student.student_id:
root.right = self._insert_recursive(root.right, student)
return root
def search(self, student_id):
return self._search_recursive(self.root, student_id)
def _search_recursive(self, root, student_id):
if root is None or root.student.student_id == student_id:
return root.student if root else None
if student_id < root.student.student_id:
return self._search_recursive(root.left, student_id)
else:
return self._search_recursive(root.right, student_id)
def display_students_in_order(self, root):
if root:
self.display_students_in_order(root.left)
print("ID:", root.student.student_id, "- Name:", root.student.full_name, "- Date of Birth:", root.student.date_of_birth)
self.display_students_in_order(root.right)
def display_students_in_reverse_order(self, root):
if root:
self.display_students_in_reverse_order(root.right)
print("ID:", root.student.student_id, "- Name:", root.student.full_name, "- Date of Birth:", root.student.date_of_birth)
self.display_students_in_reverse_order(root.left)
# Sử dụng
student_db = StudentDatabase()
# Thêm học sinh mới
student_db.insert(Student(101, "John Doe", "2005-01-15"))
student_db.insert(Student(102, "Alice Smith", "2004-08-20"))
student_db.insert(Student(103, "Bob Johnson", "2005-03-10"))
# In danh sách học sinh theo thứ tự mã từ nhỏ đến lớn
print("Students sorted by ID (ascending):")
student_db.display_students_in_order(student_db.root)
# In danh sách học sinh theo thứ tự mã từ lớn đến nhỏ
print("\nStudents sorted by ID (descending):")
student_db.display_students_in_reverse_order(student_db.root)
# Tìm kiếm học sinh theo mã
search_id = 102
found_student = student_db.search(search_id)
if found_student:
print("\nStudent found - ID:", found_student.student_id, "- Name:", found_student.full_name, "- Date of Birth:", found_student.date_of_birth)
else:
print("\nStudent with ID", search_id, "not found.")
Lời giải bài tập Chuyên đề Tin 12 Bài 10: Thực hành tổng hợp với cây tìm kiếm nhị phân hay, ngắn gọn khác:
Xem thêm lời giải bài tập Chuyên đề học tập Tin học 12 Kết nối tri thức hay, ngắn gọn khác:
Chuyên đề Tin học 12 Bài 14: Kĩ thuật duyệt đồ thị theo chiều sâu
Chuyên đề Tin học 12 Bài 15: Thực hành duyệt đồ thị theo chiều sâu
Xem thêm các tài liệu học tốt lớp 12 hay khác:
- Giải Chuyên đề Tin học 12 Kết nối tri thức
- Giải Chuyên đề Tin học 12 Chân trời sáng tạo
- Giải Chuyên đề Tin học 12 Cánh diều
- Giải lớp 12 Kết nối tri thức (các môn học)
- Giải lớp 12 Chân trời sáng tạo (các môn học)
- Giải lớp 12 Cánh diều (các môn học)
Sách VietJack thi THPT quốc gia 2025 cho học sinh 2k7:
- Giải Tiếng Anh 12 Global Success
- Giải sgk Tiếng Anh 12 Smart World
- Giải sgk Tiếng Anh 12 Friends Global
- Lớp 12 Kết nối tri thức
- Soạn văn 12 (hay nhất) - KNTT
- Soạn văn 12 (ngắn nhất) - KNTT
- Giải sgk Toán 12 - KNTT
- Giải sgk Vật Lí 12 - KNTT
- Giải sgk Hóa học 12 - KNTT
- Giải sgk Sinh học 12 - KNTT
- Giải sgk Lịch Sử 12 - KNTT
- Giải sgk Địa Lí 12 - KNTT
- Giải sgk Giáo dục KTPL 12 - KNTT
- Giải sgk Tin học 12 - KNTT
- Giải sgk Công nghệ 12 - KNTT
- Giải sgk Hoạt động trải nghiệm 12 - KNTT
- Giải sgk Giáo dục quốc phòng 12 - KNTT
- Giải sgk Âm nhạc 12 - KNTT
- Giải sgk Mĩ thuật 12 - KNTT
- Lớp 12 Chân trời sáng tạo
- Soạn văn 12 (hay nhất) - CTST
- Soạn văn 12 (ngắn nhất) - CTST
- Giải sgk Toán 12 - CTST
- Giải sgk Vật Lí 12 - CTST
- Giải sgk Hóa học 12 - CTST
- Giải sgk Sinh học 12 - CTST
- Giải sgk Lịch Sử 12 - CTST
- Giải sgk Địa Lí 12 - CTST
- Giải sgk Giáo dục KTPL 12 - CTST
- Giải sgk Tin học 12 - CTST
- Giải sgk Hoạt động trải nghiệm 12 - CTST
- Giải sgk Âm nhạc 12 - CTST
- Lớp 12 Cánh diều
- Soạn văn 12 Cánh diều (hay nhất)
- Soạn văn 12 Cánh diều (ngắn nhất)
- Giải sgk Toán 12 Cánh diều
- Giải sgk Vật Lí 12 - Cánh diều
- Giải sgk Hóa học 12 - Cánh diều
- Giải sgk Sinh học 12 - Cánh diều
- Giải sgk Lịch Sử 12 - Cánh diều
- Giải sgk Địa Lí 12 - Cánh diều
- Giải sgk Giáo dục KTPL 12 - Cánh diều
- Giải sgk Tin học 12 - Cánh diều
- Giải sgk Công nghệ 12 - Cánh diều
- Giải sgk Hoạt động trải nghiệm 12 - Cánh diều
- Giải sgk Giáo dục quốc phòng 12 - Cánh diều
- Giải sgk Âm nhạc 12 - Cánh diều