Cho cây nhị phân, kiểm tra xem có phải cây hoàn chỉnh (complete binary tree) không: các cấp độ đầy trừ cấp cuối, nút cuối cùng chững trái nhất.
Ví dụ
Cây đầu vào: (hình ảnh).
Đầu ra: True.
Thuật toán
- Sử dụng hàng đợi (deque) duyệt theo chiều rộng (BFS).
- Khởi tạo
flag = False. - Khi hàng đợi không rỗng:
- Lấy nút
temp. - Nếu
templà None:flag = True. - Nếu
flagvàtempkhông None: trả về False. - Ngược lại: đẩy con trái và con phải vào hàng đợi.
- Lấy nút
- Trả về True.
Mã nguồn Python
from collections import deque
class TreeNode:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
class Solution:
def solve(self, root):
q = deque()
q.append(root)
flag = False
while q:
temp = q.popleft()
if not temp:
flag = True
elif flag and temp:
return False
else:
q.append(temp.left)
q.append(temp.right)
return True
ob = Solution()
root = TreeNode(9)
root.left = TreeNode(7)
root.right = TreeNode(10)
root.left.left = TreeNode(6)
root.left.right = TreeNode(8)
print(ob.solve(root))
Đầu vào / Đầu ra
Input: root = TreeNode(9) ...
Output: True