题目描述:

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

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。

  1. 1<br /> / \<br /> 2 2<br /> / \ / \<br />3 4 4 3<br /> <br />但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
  2. 1<br /> / \<br /> 2 2<br /> \ \<br /> 3 3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/symmetric-tree

知识点:

  • 深优先遍历

解题思路:

  • 这道题是一道典型的广度优先遍历活用的题,其是具有一定的套路的。
  • 我们要判断一棵树是不是镜像的,首先判断当前节点是否存在,当前节点节点值是否存在,然后判断中使用递归左节点的左子树与右节点的右子树,左节点的右子树与右节点的左子树
  • 目前递归的巧妙运用我们已经接触两个,一个是在17.树的子结构,前一个用来判断,后面两个或运算符连接的用来递归遍历每一个节点,而这个题是在判断中使用递归,注意既然是递归那么一定要有返回值,而且我们既然是在判断中使用递归那么返回值一定是布尔值

解题代码:

var isSymmetric = function(root) {
    if(!root) return true;
    const isSimilar = (l,r) => {
        if(!l && !r) return true; // 注意这里是递归的退出条件,代表走到最后一个节点时说明二叉树是对称的
        if(l && r && l.val === r.val &&
        isSimilar(l.left,r.right) && isSimilar(l.right,r.left)) {
            return true;
        }
        return false;
    }
    return isSimilar(root.left,root.right);
};