Câu hỏi:
13/07/2024 139
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 tìm kiếm nhị phân hay không.
Ví dụ:
Dãy [5, 3, 6, None, 4, None, 10] là biểu diễn của cây tim kiếm nhị phân.
Dãy [2, 1, 5, None, 3, 4, 10] không là biểu diễn của cây tìm kiếm nhị phân (mặc dù dãy này là biểu diễn của cây nhị phân hoàn chỉnh đã biến đổi).
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 tìm kiếm nhị phân hay không.
Ví dụ:
Dãy [5, 3, 6, None, 4, None, 10] là biểu diễn của cây tim kiếm nhị phân.
Dãy [2, 1, 5, None, 3, 4, 10] không là biểu diễn của cây tìm kiếm nhị phân (mặc dù dãy này là biểu diễn của cây nhị phân hoàn chỉnh đã biến đổi).
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 tìm kiếm nhị phân hay không, có thể sử dụng một thuật toán kiểm tra tính chất của cây tìm kiếm nhị phân.
Một cây tìm kiếm nhị phân có tính chất sau:
- Mỗi nút trong cây có giá trị lớn hơn hoặc bằng tất cả các nút trong cây con bên trái của nó.
- Mỗi nút trong cây có giá trị nhỏ hơn tất cả các nút trong cây con bên phải của nó.
Dựa trên các tính chất trên chương trình sẽ được viết như sau:
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def is_binary_search_tree(arr):
def helper(index, min_val, max_val):
if index >= len(arr) or arr[index] is None:
return True
if min_val < arr[index] < max_val:
left_child_index = 2 * index + 1
right_child_index = 2 * index + 2
return (helper(left_child_index, min_val, arr[index]) and
helper(right_child_index, arr[index], max_val))
else:
return False
return helper(0, float('-inf'), float('inf'))
# Ví dụ
arr1 = [5, 3, 6, None, 4, None, 10]
arr2 = [2, 1, 5, None, 3, 4, 10]
if is_binary_search_tree(arr1):
print("Dãy arr1 là biểu diễn của một cây tìm kiếm nhị phân.")
else:
print("Dãy arr1 không là biểu diễn của một cây tìm kiếm nhị phân.")
if is_binary_search_tree(arr2):
print("Dãy arr2 là biểu diễn của một cây tìm kiếm nhị phân.")
else:
print("Dãy arr2 không là biểu diễn của một cây tìm kiếm nhị phân.")
Hot: 500+ Đề thi thử tốt nghiệp THPT các môn, ĐGNL các trường ĐH... file word có đáp án (2025). Tải ngay
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Lời giải
Sơ đồ có dạng như sau:
Số 10 là gốc.
1 < 10. Chèn sang nút con bên trái số 10.
2 < 10 & 2 > 1. Chèn sang nút con bên phải số 1.
11 > 10. Chèn sang nút con bên phải số 10.
8 < 10 & 8 > 1 & 8 > 2. Chèn sang nút con bên phải số 2.
15 > 10 & 15 > 11. Chèn sang nút con bên phải số 11.
20 > 10 & 20 > 11 & 20 > 15. Chèn sang nút con bên phải số 15.
9 < 10 & 9 > 1 & 9 > 2 & 9 > 8. Chèn sang nút con bên phải số 8.
0 < 10 & 0 < 1 & 0 < 2. Chèn sang nút con bên trái số 2 (Cũng có thể là số 1, 8, 9).
Lời giải
Nếu dãy số được chèn 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 sẽ có dạng như một cây cân bằng.
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.
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.
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.
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.
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.