import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* public TreeNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
public boolean isCompleteTree (TreeNode root) {
// write code here
//我们需要注意到一点,按照从左到右层序遍历的效果,如果是完全二叉树,那么#后面不会再有值x
//即:只有xxx###才是完全二叉树,xx#x,xxx##xx#x,只要是#后还要x,都不是完全二叉树
//当第一次碰到空节点时,将firstnull置为true,并跳过本次循环
//如果后面又碰到了非空的节点,则说明不是完全二叉树
if(root==null) return true;
Queue<TreeNode> q = new LinkedList<>();
boolean firstnull=false;
q.add(root);
while(!q.isEmpty())
{
TreeNode cur=q.poll();
if(cur==null)
{
firstnull=true;
continue;
}
else//说明当前节点不是空节点
{
if(firstnull==true) return false;//当前节点不是空节点,但是之前又见过了空节点,不是完全二叉树
q.add(cur.left);
q.add(cur.right);
}
}
return true;
}
}