Câu hỏi:
11/10/2026 5
Sử 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ử 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.
Trả lời:
Giải bởi Vietjack
Để 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)
Để 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:
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ị.
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 2:
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”.
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”.
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ã.
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:
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ạ.
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 hỏi mới nhất
Xem thêm »-
-
-
-
Trong CSDL QL_ThuVien, hãy xác định khóa chính của bảng MƯỢN SÁCH sau. Biết rằng trong một ngày quy định không được mượn một cuốn sách nhiều lần.
Số thẻ Mã số sách Ngày mượn Ngày trả TV-02
TO-012
5/9/2015
30/9/2015
TV-04
TN-103
12/9/2015
15/9/2015
TV-02
TN-102
24/9/2015
5/10/2015
TV-02
TO-012
5/10/2015
...
...
...
...
-
-
-
-
-
-
