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;
    }
}