Câu hỏi:

13/07/2024 93

Mô tả quá trình tra cứu giá tiền món Bún chả thực hiện trên cây tìm kiếm nhị phân đã vẽ ở Luyện tập 1

Quảng cáo

Trả lời:

verified
Giải bởi Vietjack

Quá trình tra cứu giá tiền của món "Bún chả" trên cây tìm kiếm nhị phân đã vẽ có thể được mô tả như sau:

1. Bắt đầu từ nút gốc của cây.

2. So sánh tên của nút gốc với "Bún chả":

- Nếu tên của nút gốc là "Bún chả", chúng ta đã tìm thấy món "Bún chả". Lúc này, chúng ta lấy giá tiền của món "Bún chả" từ nút này.

- Nếu tên của nút gốc lớn hơn "Bún chả", chúng ta di chuyển sang cây con bên trái của nút gốc và tiếp tục tìm kiếm.

- Nếu tên của nút gốc nhỏ hơn "Bún chả", chúng ta di chuyển sang cây con bên phải của nút gốc và tiếp tục tìm kiếm.

3. Quá trình này lặp lại cho đến khi chúng ta tìm thấy món "Bún chả" hoặc điều kiện dừng được kích hoạt (không có nút nào chứa tên "Bún chả").

Nếu món "Bún chả" được tìm thấy, chúng ta sẽ biết được giá tiền của món này. Nếu không, chúng ta sẽ biết rằng món "Bún chả" không có trong danh sách thực đơn và không có thông tin về giá tiền.

CÂU HỎI HOT CÙNG CHỦ ĐỀ

Lời giải

Gợi ý chương trình mẫu về cách sử dụng cây tìm kiếm nhị phân để quản lí danh sách học sinh của một trường trung học phổ thông:

class Student:

    def __init__(self, student_id, name, date_of_birth):

        self.student_id = student_id

        self.name = name

        self.date_of_birth = date_of_birth

        self.left = None

        self.right = None

class StudentManager:

    def __init__(self):

        self.root = None

    def insert(self, root, student_id, name, date_of_birth):

        if root is None:

            return Student(student_id, name, date_of_birth)

        if student_id < root.student_id:

            root.left = self.insert(root.left, student_id, name, date_of_birth)

        elif student_id > root.student_id:

            root.right = self.insert(root.right, student_id, name, date_of_birth)

        return root

    def add_student(self, student_id, name, date_of_birth):

        self.root = self.insert(self.root, student_id, name, date_of_birth)

    def search(self, root, student_id):

        if root is None or root.student_id == student_id:

            return root

        if student_id < root.student_id:

            return self.search(root.left, student_id)

        return self.search(root.right, student_id)

    def find_student(self, student_id):

        return self.search(self.root, student_id)

    def update_student(self, student_id, new_name, new_date_of_birth):

        student = self.find_student(student_id)

        if student:

            student.name = new_name

            student.date_of_birth = new_date_of_birth

        else:

            print("Student not found.")

# Sử dụng chương trình

student_manager = StudentManager()

# Thêm học sinh

student_manager.add_student(1001, "Nguyen Van A", "2005-03-15")

student_manager.add_student(1002, "Tran Thi B", "2004-08-22")

student_manager.add_student(1003, "Le Van C", "2006-01-10")

# Tìm kiếm học sinh

student = student_manager.find_student(1002)

if student:

    print(f"Student found - Student ID: {student.student_id}, Name: {student.name}, Date of Birth: {student.date_of_birth}")

else:

    print("Student not found.")

# Cập nhật thông tin học sinh

student_manager.update_student(1001, "Pham Thi D", "2005-05-20")

# Kiểm tra lại thông tin sau khi cập nhật

student = student_manager.find_student(1001)

if student:

    print(f"Updated student - Student ID: {student.student_id}, Name: {student.name}, Date of Birth: {student.date_of_birth}")

else:

    print("Student not found.")

Lưu ý trong mã chương trình này:

- Lớp Student đại diện cho mỗi học sinh, với các thuộc tính là student_id (mã học sinh), name (họ tên) và date_of_birth (ngày sinh).

- Lớp StudentManager chứa các phương thức để thêm học sinh vào danh sách, tìm kiếm học sinh theo mã và cập nhật thông tin học sinh. Mỗi học sinh được lưu trữ trong một cây tìm kiếm nhị phân, với student_id làm khóa.

 

 


 

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ạn cần đăng ký gói VIP ( giá chỉ từ 199K ) để làm bài, xem đáp án và lời giải chi tiết không giới hạn.

Nâng cấp VIP

Vietjack official store
Đăng ký gói thi VIP

VIP +1 - Luyện thi tất cả các đề có trên Website trong 1 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +3 - Luyện thi tất cả các đề có trên Website trong 3 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +6 - Luyện thi tất cả các đề có trên Website trong 6 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay

VIP +12 - Luyện thi tất cả các đề có trên Website trong 12 tháng

  • Hơn 100K đề thi thử, đề minh hoạ, chính thức các năm
  • Với 2tr+ câu hỏi theo các mức độ Nhận biết, Thông hiểu, Vận dụng
  • Tải xuống đề thi [DOCX] với đầy đủ đáp án
  • Xem bài giảng đính kèm củng cố thêm kiến thức
  • Bao gồm tất cả các bậc từ Tiểu học đến Đại học
  • Chặn hiển thị quảng cáo tăng khả năng tập trung ôn luyện

Mua ngay