判断完全二叉树

 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

 

posted @ 2022-01-12 20:41  CaptainDragonfly  阅读(31)  评论(0编辑  收藏  举报