难度
题目内容 给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
题解
想象一个比对单元,比对一个节点的左右2个子节点l和r: 1.如果l和r都为空,那么比对成功返回true; 2.如果l和r其中一个为空,那么比对失败返回false; 3.如果l和r都不为空,那么比对它们的值:
· 它们的值相等
· 它们的值不相等
当它们的值不相等时,比对自然失败,返回false;
当它们的值相等时,那么作为镜像对称的二叉树,l的left就需要等于r的right,l的right就应该等于r的left。
于是一个比对单元完成:
function compareUnit(l, r) {
if(!l && !r) return true;
if(!l || !r) return false;
if(l.val === r.val) {
// 当二者值相等时,比较它们的left和right并且对其做新的比对单元
return recur(l.left, r.right) && recur(l.right, r.left)
}
// 二者值不相等的情况
else return false;
}
最后我们调用这个比对单元函数即可
/**
* @param {TreeNode} root
* @return {boolean}
*/
var isSymmetric = function(root) {
if(!root) return true;
return recur(root.left, root.right)
};