101. Symmetric Tree
Problem
Tags: Tree
, Depth-First Search
, Breadth-First Search
, Binary Tree
Given the root
of a binary tree, check whether it is a mirror of itself (i.e., symmetric around its center).
Example 1:
Input: root = [1,2,2,3,4,4,3]
Output: true
Example 2:
Input: root = [1,2,2,null,3,null,3]
Output: false
Constraints:
- The number of nodes in the tree is in the range
[1, 1000]
. -100 <= Node.val <= 100
Follow up: Could you solve it both recursively and iteratively?
Code
JS
// 101. Symmetric Tree (3/21/53740)
// Runtime: 88 ms (49.92%) Memory: 41.27 MB (94.92%)
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
function isSymmetric(root) {
if (!root) return true;
if (!root.left && !root.right) return true;
if (!root.left || !root.right) return false;
let queue = [root.left, root.right];
while (queue.length) {
if (queue.length % 2) return false;
const lvl_size = queue.length;
let next = [];
for (let i = 0; i < lvl_size / 2; i++) {
const node1 = queue.shift();
const node2 = queue.pop();
if (!node1 && !node2) continue;
if (!node1 || !node2) return false;
if (node1.val !== node2.val) return false;
next.unshift(node1.left);
next.unshift(node1.right);
next.push(node2.right);
next.push(node2.left);
}
queue = next;
}
return true;
}