/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param root TreeNode类
 * @return bool布尔型
 */
function isCompleteTree(root) {
    // write code here
    // 层序遍历函数
    function levelOrder(node) {
        if (node == null) {
            return true;
        }
        // 定义遍历的节点队列
        let query = [];
        query.push(node);
        let flag = false;
        while (query.length) {
            // 取出队列第一个节点
            let cur = query[0];
            // 弹出第一个节点
            query = query.slice(1);
            // console.log("cur:", cur);
            // 当第一次遇到空节点,则打标记
            if (cur == null) {
                flag = true;
                continue;
            }
            // 若第二次遇到空节点,则返回false
            // 完全二叉树若存在子节点,必须有左节点,若左节点为空,右节点非空则非完全二叉树
            if (flag) {
                return false;
            }
            // 向队列中添加左节点
            query.push(cur.left);
            // 向队列中添加右节点
            query.push(cur.right);
        }
        return true;
    }
    return levelOrder(root);
}
module.exports = {
    isCompleteTree: isCompleteTree,
};