Giả sử chúng ta có một cây nhị phân; chúng ta phải kiểm tra xem đây có phải là một cây nhị phân hoàn chỉnh hay không. Như chúng ta biết trong một cây nhị phân hoàn chỉnh, các cấp được lấp đầy bởi các nút ngoại trừ có thể là nút cuối cùng và tất cả các nút ở cấp cuối cùng ở bên trái càng xa càng tốt.
Vì vậy, nếu đầu vào giống như
thì đầu ra sẽ là True
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau−
-
q:=một hàng đợi kết thúc kép
-
chèn root vào cuối q
-
cờ:=Sai
-
trong khi q không trống, thực hiện
-
temp:=phần tử sau khi xóa từ bên trái của q
-
nếu tạm thời là null, thì
-
flag:=True
-
-
ngược lại, khi cờ được đặt và tạm thời không null, thì
-
trả về Sai
-
-
nếu không,
-
chèn bên trái nhiệt độ vào cuối q
-
chèn quyền tạm thời vào cuối q
-
-
-
trả về True
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
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
root = TreeNode(9) root.left = TreeNode(7) root.right = TreeNode(10) root.left.left = TreeNode(6) root.left.right = TreeNode(8)
Đầu ra
True