Câu hỏi:
26/06/2024 116Sử dụng cây tìm kiếm nhị phân để hiển thị các món trong tệp menu.inp ở Bài 8 theo thứ tự giá tiền tăng dần. Mỗi dòng in ra gồm tên món và giá tiền. Nếu có hai hoặc nhiều món cùng giá tiền thì các món đó được hiển thị theo thứ tự xuất hiện trong tệp menu.inp.
Sách mới 2k7: Tổng ôn Toán, Lí, Hóa, Văn, Sử, Địa... kỳ thi tốt nghiệp THPT Quốc gia 2025, đánh giá năng lực (chỉ từ 70k).
Quảng cáo
Trả lời:
Để hiển thị các món trong tệp menu.inp theo thứ tự giá tiền tăng dần bằng cây tìm kiếm nhị phân, chúng ta cần đọc dữ liệu từ tệp, sau đó chèn mỗi món vào cây tìm kiếm nhị phân dựa trên giá tiền của món. Nếu có nhiều món có cùng giá tiền, chúng ta có thể sử dụng danh sách liên kết hoặc danh sách kết hợp để lưu trữ các món có cùng giá tiền. Dưới đây là một cách để thực hiện điều này:
class MenuItem:
def __init__(self, name, price):
self.name = name
self.price = price
class TreeNode:
def __init__(self, menu_item):
self.menu_item = menu_item
self.left = None
self.right = None
self.same_price = [] # Danh sách các món có cùng giá tiền
class MenuDatabase:
def __init__(self):
self.root = None
def insert(self, menu_item):
self.root = self._insert_recursive(self.root, menu_item)
def _insert_recursive(self, root, menu_item):
if root is None:
return TreeNode(menu_item)
if menu_item.price < root.menu_item.price:
root.left = self._insert_recursive(root.left, menu_item)
elif menu_item.price > root.menu_item.price:
root.right = self._insert_recursive(root.right, menu_item)
else:
root.same_price.append(menu_item)
return root
def display_menu_by_price(self, root):
if root:
self.display_menu_by_price(root.left)
print("Name:", root.menu_item.name, "- Price:", root.menu_item.price)
for item in root.same_price:
print("Name:", item.name, "- Price:", item.price)
self.display_menu_by_price(root.right)
# Đọc dữ liệu từ tệp menu.inp và chèn mỗi món vào cây tìm kiếm nhị phân
menu_db = MenuDatabase()
with open("menu.inp", "r") as file:
for line in file:
name, price = line.strip().split(", ")
menu_item = MenuItem(name, float(price))
menu_db.insert(menu_item)
# In danh sách món theo thứ tự giá tiền tăng dần
print("Menu sorted by price (ascending):")
menu_db.display_menu_by_price(menu_db.root)CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Trong bài 9, chúng ta đã học thao tác duyệt cây. Với bài toán thực tế quản lí danh bạn điện thoại, làm thế nào để sử dụng các thao tác đó vào cây tìm kiếm nhị phân để thêm, tìm kiếm, hiển thị toàn bộ các liên hệ theo thứ tự sắp xếp của tên lên hệ trong danh bạ.
Câu 2:
Tiếp tục với ứng dụng quản lí danh bạ, chức năng hiển thị danh sách liên hệ theo thứ tự từ điển. Do hạn chế của màn hình, mỗi trang chỉ hiển thị được 20 liên hệ. Hãy thêm tính năng in các liên hệ ở trang n bất kì do người dùng nhập vào, điều kiện n nguyên, lớn hơn 0 và nhỏ hơn hoặc bằng tổng số trang có thể hiển thị.
Câu 3:
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ã.
Câu 4:
Hãy vẽ cây tìm kiếm nhị phân ứng với
a) Dữ liệu tệp contacts.inp ở trong phần thực hành.
b) Từ cây nhận được ở ý a, thêm liên hệ “Anh, Nguyễn Văn Tùng, 0982 000 134”.
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 19 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 18 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 15 có đáp án
263 câu Trắc nghiệm tổng hợp ôn thi tốt nghiệp THPT môn Tin học Chủ đề F. Giải quyết vấn đề với sự trợ giúp của máy tính có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 16 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 14 có đáp án
15 câu Trắc nghiệm Tin học 12 Kết nối tri thức Bài 20 có đáp án
15 câu Trắc nghiệm Tin học 12 Cánh diều Làm quen với CSS có đáp án
về câu hỏi!