import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return bool布尔型
     */
    public boolean isCompleteTree (TreeNode root) {
        // write code here
       if(root==null||root.left==null&&root.right==null){
        return true;
       }
       //层序遍历,将二叉树遍历到队列中,
    //    如果前面出现空节点那么后面一定都是空节点,
    // 将所有的空节点遍历完在队列不为空的时候,如果又出现非空节点即false
    //    
       // ArrayList<Integer> a = new ArrayList<>();
        Queue<TreeNode> q = new LinkedList<>();
        //此处不能用ArrayDeque,它不能存储null
        q.add(root);
        boolean f = false;//标记是否遇到叶子节点
        while(!q.isEmpty()){
            TreeNode tmp =q.poll();
            if(tmp==null){
                f = true;
                continue;
            }
            if(f){
                //遇到空节点的情况下又遇到非空节点
                return false;
            }
            q.add(tmp.left);
            q.add(tmp.right);
        }
       

        return true;
    }
}