Trong Bài 7, cây tìm tìm kiếm nhị phân được cài đặt bằng mảng một chiều và mỗi nút của cây có khoá là một thuộc tính.
Trong trường hợp mỗi nút của cây tìm kiếm nhị phân cần chứa nhiều hơn một thuộc tính, có thể sử dụng một lớp đại diện cho nút của cây, và mỗi đối tượng của lớp này sẽ chứa các thuộc tính tương ứng với mỗi nút.
Dưới đây là một cách để triển khai sử dụng lớp để đại diện cho nút của cây tìm kiếm nhị phân trong trường hợp mỗi nút chứa hai thuộc tính là tên và giá tiền của món ăn:
class MenuItem:
def __init__(self, name, price):
self.name = name
self.price = price
self.left = None
self.right = None
def insert(root, name, price):
if root is None:
return MenuItem(name, price)
if name < root.name:
root.left = insert(root.left, name, price)
elif name > root.name:
root.right = insert(root.right, name, price)
return root
def search(root, name):
if root is None or root.name == name:
return root
if name < root.name:
return search(root.left, name)
return search(root.right, name)
# Ví dụ minh họa
root = None
root = insert(root, "Pho", 35)
root = insert(root, "Banh Mi", 25)
root = insert(root, "Bun Cha", 40)
# Tìm kiếm một món trong cây
search_result = search(root, "Pho")
if search_result:
print(f"Tên món: {search_result.name}, Giá: {search_result.price}")
else:
print("Không tìm thấy món.")
search_result = search(root, "Banh Xeo")
if search_result:
print(f"Tên món: {search_result.name}, Giá: {search_result.price}")
else:
print("Không tìm thấy món.")
Chú thích trong mã này:
- Lớp MenuItem đại diện cho nút của cây, mỗi đối tượng của lớp này chứa hai thuộc tính là tên và giá tiền của món ăn, cũng như hai con trỏ left và right để tham chiếu đến các nút con bên trái và bên phải.
- Hàm insert được sử dụng để chèn một món ăn mới vào cây tìm kiếm nhị phân.
- Hàm search được sử dụng để tìm kiếm một món ăn trong cây tìm kiếm nhị phân.