1 # Definition for a binary tree node.
2 # class TreeNode:
3 # def __init__(self, val=0, left=None, right=None):
4 # self.val = val
5 # self.left = left
6 # self.right = right
7
8 # 判断一个树是否是完全二叉树
9 “”“
10 解决思路:
11 1、任一节点,有右孩子无左孩子,return False
12 2、在1不违规的条件下,如果遇到了第一个左右孩子不全的节点,后续节点均为叶子节点
13 ”“”
14 from collections import deque
15 def is_valid_cbt(head: TreeNode) -> bool:
16 # 采用宽度优先遍历,需使用队列作为辅助
17 if head is None:
18 return True
19 queue = deque()
20 # 是否遇到过左右两个孩子节点不双全的节点
21 leaf = False
22 queue.append(head)
23 while queue:
24 head = queue.popleft()
25 l = head.left
26 r = head.right
27 # 条件2
28 if (leaf and (l is not None or r is not None)) \
29 # 条件1
30 or (l is None and r is not None):
31 return False
32
33 if l is not None:
34 queue.append(l)
35 if r is not None:
36 queue.append(r)
37 if l is None or r is None:
38 leaf = True
39 return True