958. 二叉树的完全性检验
难度中等
给定一个二叉树的 root ,确定它是否是一个 完全二叉树 。
在一个 完全二叉树 中,除了最后一个关卡外,所有关卡都是完全被填满的,并且最后一个关卡中的所有节点都是尽可能靠左的。它可以包含 1 到 2h 节点之间的最后一级 h 。
示例 1:

输入:root = [1,2,3,4,5,6]
输出:true
解释:最后一层前的每一层都是满的(即,结点值为 {1} 和 {2,3} 的两层),且最后一层中的所有结点({4,5,6})都尽可能地向左。
示例 2:

输入:root = [1,2,3,4,5,null,7] 输出:false 解释:值为 7 的结点没有尽可能靠向左侧。
提示:
- 树的结点数在范围
[1, 100]内。 1 <= Node.val <= 1000
迭代法
- 层序遍历每一个节点,知道遍历完所有的节点为止,退出
- 然后将队列节点依次弹出,如果发现不为空则不是完全二叉树
原因是完全二叉树的节点从左往右的节点中间不能有空隙

所以我们使用层序遍历,直到遍历完每一个节点退出循环(对于叶子节点,左右孩子为空也要进队列). 然后依次弹出队列中剩余节点,如果弹出节点有一个不为空,那证明从左往右中间肯定有空隙,所以就不是一颗完全二叉树.

class Solution {
public boolean isCompleteTree(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
//层序遍历每一个节点,知道遍历完所有的节点为止,退出
while(!queue.isEmpty()) {
TreeNode cur = queue.poll();
if(cur==null) {
break;
}
queue.offer(cur.left);
queue.offer(cur.right);
}
//然后将队列节点依次弹出,如果发现不为空则不是完全二叉树
while(!queue.isEmpty()){
if(queue.poll()!=null){
return false;
}
}
return true;
}
}




![[go]深入学习Go总结](https://img-blog.csdnimg.cn/img_convert/b2b65101a65acecf7d7e7aee1f1be1d4.png)














