X

Chuyên đề Tin 12 Kết nối tri thức

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


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 thực tế, một đối tượng có thể có nhiều thuộc tính. Ví dụ, với bài toán quản lí các món trong thực đơn, mỗi món có hai thuộc tính là tên và giá tiền. Trong trường hợp này, cây tìm kiếm nhị phân biểu diễn danh sách các món được cài đặt bằng mảng như thế nào và làm thế nào để mỗi nút của cây chứa hai thuộc tính là tên và giá tiền?

Giải Chuyên đề Tin 12 Bài 8: Thực hành cây tim kiếm nhị phân - Kết nối tri thức

Khởi động trang 37 Chuyên đề Tin học 12: 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 thực tế, một đối tượng có thể có nhiều thuộc tính. Ví dụ, với bài toán quản lí các món trong thực đơn, mỗi món có hai thuộc tính là tên và giá tiền. Trong trường hợp này, cây tìm kiếm nhị phân biểu diễn danh sách các món được cài đặt bằng mảng như thế nào và làm thế nào để mỗi nút của cây chứa hai thuộc tính là tên và giá tiền?

Lời giải:

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.

Lời giải bài tập Chuyên đề Tin 12 Bài 8: Thực hành cây tim 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: