/*
 * function TreeNode(x) {
 *   this.val = x;
 *   this.left = null;
 *   this.right = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param pRoot TreeNode类
 * @return bool布尔型
 */
function isSymmetrical(root) {
    if (!root) {
        return true;
    }

    return bfsCheck(root.left, root.right);
}

function bfsCheck(node1, node2) {
    const queue = [node1, node2];

    while (queue.length) {
        const n1 = queue.pop();
        const n2 = queue.pop();

        if (!n1 && !n2) continue;
        if (!n1 || !n2 || n1.val !== n2.val) return false;

        queue.push(n1.left);
        queue.push(n2.right);

        queue.push(n1.right);
        queue.push(n2.left);
    }

    return true;
}

function dfsCheck(node1, node2) {
    if (!node1 && !node2) return true
    if (!node1 || !node2) return false

    return (
        node1.val === node2.val &&
        dfsCheck(node1.left, node2.right) &&
        dfsCheck(node1.right, node2.left)
    );
}
module.exports = {
    isSymmetrical: isSymmetrical,
};