Câu hỏi:

13/07/2024 107

Cho trước dãy A bao gồm các số nguyên và các giá trị None. Viết chương trình kiểm tra xem A có phải là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi hay không?

Ví dụ:

Dãy [10, 7, 0, 5, None, 3] là biểu diễn của cây nhị phân hoàn chỉnh đã biến đổi. Dãy [1, 6, None, 2, 3, None, 4] không là biểu diễn của cây nhị phân tổng quát nào. 

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).

Tổng ôn Toán-lý hóa Văn-sử-đia Tiếng anh & các môn khác

Quảng cáo

Trả lời:

verified
Giải bởi Vietjack

Để kiểm tra xem một dãy đã cho có phải là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi hay không, chúng ta có thể sử dụng một số quy tắc sau:\

- Dãy đó phải là biểu diễn của một cây nhị phân, tức là mỗi phần tử của dãy đều có thể là một nút hoặc None.

- Đối với mỗi nút trong dãy, nút trái của nó (nếu có) phải nằm ở vị trí 2*i + 1 trong dãy, và nút phải của nó (nếu có) phải nằm ở vị trí 2*i + 2 trong dãy, với i là vị trí của nút trong dãy (bắt đầu từ 0).

Dựa trên các quy tắc trên có thể viết chương trình như sau:

def is_complete_binary_tree(arr):

    # Kiểm tra dãy có phải là biểu diễn của một cây nhị phân không

    for i in range(len(arr)):

        if arr[i] is not None:

            # Kiểm tra nếu nút trái không vượt quá độ dài của dãy

            left_child_index = 2 * i + 1

            if left_child_index < len(arr) and arr[left_child_index] is None:

                return False

            # Kiểm tra nếu nút phải không vượt quá độ dài của dãy

            right_child_index = 2 * i + 2

            if right_child_index < len(arr) and arr[right_child_index] is None:

                return False

    return True

# Ví dụ

arr1 = [10, 7, 0, 5, None, 3]

arr2 = [1, 6, None, 2, 3, None, 4]

if is_complete_binary_tree(arr1):

    print("Dãy arr1 là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi.")

else:

    print("Dãy arr1 không là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi.")

if is_complete_binary_tree(arr2):

    print("Dãy arr2 là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi.")

else:

    print("Dãy arr2 không là biểu diễn của một cây nhị phân hoàn chỉnh đã biến đổi.")

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

Câu 1:

Cho trước dãy các số A = [10, 1, 2, 11, 8, 15, 20, 9, 0]. 

Hãy mô tả và vẽ sơ đồ cây nhị phân biểu diễn dãy số trên sau khi thực hiện thao tác chèn như đã mô tả trong hoạt động. 

Xem đáp án » 13/07/2024 345

Câu 2:

Nếu dãy số được đưa vào cây tìm kiếm nhị phân là tăng dần (hoặc giảm dần) thì cây tìm kiếm nhị phân tương ứng có dạng như thế nào?

Xem đáp án » 13/07/2024 182

Câu 3:

Cây tìm kiếm nhị phân T được thiết lập bằng cách chèn lần lượt các phần tử 3, 1, 6, 5, 0, 2, 4. Dùng sơ đồ mô tả các bước tìm kiếm giá trị khóa là:

a) 4                                   b) 10                                 c) 0

Xem đáp án » 13/07/2024 136

Câu 4:

Quan sát các cây nhị phân sau, em có nhận xét gì về giá trị của các nút trên cây?

Quan sát các cây nhị phân sau, em có nhận xét gì về giá trị của các nút trên cây? (ảnh 1)

Xem đáp án » 13/07/2024 129

Câu 5:

Từ các khóa 1, 2, 3 có thể tạo ra được bao nhiêu cây tìm kiếm nhị phân? Hãy vẽ sơ đồ mô tả các cây này.

Xem đáp án » 13/07/2024 128

Câu 6:

Thay đổi thứ tự chèn các phần tử vào cây nhị phân có tạo ra các cây tìm kiếm nhị phân khác nhau hay không? Cho ví dụ minh họa.

Xem đáp án » 13/07/2024 125

Câu 7:

Dữ liệu đầu vào là danh sách học sinh trong lớp và điểm trung bình các môn. Danh sách được cho trong tệp văn bản có dạng như bảng bên.

Viết chương trình đọc tập dữ liệu đầu vào trên và liên tục thực hiện các thao tác sau:

a) Nhập thêm vào danh sách học sinh và điểm trung bình.

b) Tìm kiếm với yêu cầu nhập họ tên học sinh và đưa ra kết quả họ tên học sinh, điểm trung bình hoặc thông báo "không tìm thấy".

Chương trình kết thúc khi nhập vào một xâu rỗng. Yêu cầu giải bài này bằng cây tìm kiếm nhị phân.

Dữ liệu đầu vào là danh sách học sinh trong lớp và điểm trung bình các môn.  (ảnh 1)

 

 

Xem đáp án » 13/07/2024 123

Bình luận


Bình luận