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
1 câu trả lời 216
Để 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.")
Quảng cáo
Bạn cần hỏi gì?
Câu hỏi hot cùng chủ đề
-
Đã trả lời bởi chuyên gia
149615 -
Đã trả lời bởi chuyên gia
99992 -
Đã trả lời bởi chuyên gia
97600 -
Đã trả lời bởi chuyên gia
80297 -
Đã trả lời bởi chuyên gia
73088 -
Đã trả lời bởi chuyên gia
56178 -
Đã trả lời bởi chuyên gia
55554
