Câu hỏi:
13/07/2024 71Cho 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ừ 110k).
Quảng cáo
Trả lời:
Để 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.
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?
Câu 3:
Viết hàm chèn khoá v vào cây tìm kiếm nhị phân T sử dụng kĩ thuật đệ quy.
Câu 4:
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
Câu 5:
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?
Câu 6:
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.
Câu 7:
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.
263 câu Trắc nghiệm tổng hợp ôn thi tốt nghiệp THPT môn Tin học Chủ đề F. Giải quyết vấn đề với sự trợ giúp của máy tính có đáp án
15 câu Trắc nghiệm Tin học 12 KNTT Bài 7: HTML và cấu trúc trang web
15 câu Trắc nghiệm Tin học 12 KNTT Bài 10: Tạo liên kết
15 câu Trắc nghiệm Tin học 12 KNTT Bài 11: Chèn tệp tin đa phương tiện và khung nội tuyến vào trang web
15 câu Trắc nghiệm Tin học 12 KNTT Bài 8: Định dạng văn bản
15 câu Trắc nghiệm Tin học 12 KNTT Bài 9: Tạo danh sách, bảng
15 câu Trắc nghiệm Tin học 12 Cánh diều Bài 1: Làm quen với ngôn ngữ đánh dấu siêu văn bản
Đề thi học kì 1 Tin học 12 Kết nối tri thức có đáp án- Đề 1
về câu hỏi!