[路飞]_力扣算法题_101. 对称二叉树

87 阅读1分钟
难度 简单\color{#2db55d}{简单}

题目内容 给定一个二叉树,检查它是否是镜像对称的。

 

例如,二叉树 [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)
};