Javascript, Iterative, commented
\n/**\nTime Complexity: O(n)\nSpace Complexity: O(n)\n*/\nvar isSymmetric = function(root) {\n//     if there is no root that means it is a symettric tree\n    
```\n/**\nTime Complexity: O(n)\nSpace Complexity: O(n)\n*/\nvar isSymmetric = function(root) {\n//     if there is no root that means it is a symettric tree\n    if(!root) return true\n//     Start 2 queue one for the left banch and one for the right branch\n    let q1 = [root.left], q2 = [root.right]\n//     traverse through both branches, until they are both exhausted at the same time\n    while (q1.length > 0 && q2.length > 0){\n//         get current left and compare it to the right of each branch (this is how a mirror works)\n        let node1 = q1.shift()\n        let node2 = q2.shift()\n//         if both are null at the same time, just move on\n        if(!node1 && !node2) continue\n//         if the current level is not symmetric (1 of them is null or they are not equal) return false\n        if(!node1 || !node2 || node1.val !== node2.val) return false\n//         to mentain comparing left to right (this is the tricky part, you have to push left and right & reverse for each branch)\n        q1.push(node1.left)\n        q2.push(node2.right)\n        q1.push(node1.right)\n        q2.push(node2.left)\n    }\n//     If both are exhausted at the same time and they are symmeteric return true\n    return true\n    \n};\n```
['Breadth-First Search', 'JavaScript']