LeetCode——对称二叉树(JavaScript)
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
说明:
如果你可以运用递归和迭代两种方法解决这个问题,会很加分。
思路:
暂时只想到迭代法,以后想到递归再来更新。
这里采用层序遍历,将每一层的节点存入数组,然后判断这个数组是否是对称的。所有层都判断完,若都对称,返回true。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
if(!root) return true
let queue = [root.left, root.right];
while (queue.length) {
let len = queue.length; // 该层的节点数
let level = []
while (len) { // 将一层都加入level数组
let pop = queue.shift(); // 出队列元素
level.push(pop)
if (pop) {
queue.push(pop.left)
queue.push(pop.right)
}
len--
}
for (let i = 0, l = level.length; i < l/2; i++) {
// 一个为null,一个不为null的情况
if (level[i] === null && level[l-i-1] !== null) return false
if (level[i] !== null && level[l-i-1] === null) return false
// 两个都不是null的情况
if (level[i] !== null && level[l-i-1] !== null) {
if (level[i].val !== level[l-i-1].val) return false
}
}
}
return true
};