图解LeetCode——剑指 Offer 28. 对称的二叉树

2023-05-10 13:24:16 浏览数 (1)

一、题

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。

二、示例

2.1> 示例 1:

【输入】root = [1,2,2,3,4,4,3] 【输出】true

2.2> 示例 2:

【输入】root = [1,2,2,null,3,null,3] 【输出】false

限制:

  • 0 <= 节点个数 <= 1000

三、解题思路

根据题目描述,我们需要确定某个二叉树是否是对称二叉树。那么以第二层Node节点为例,符合对称二叉树的条件就是Node.left.left等于Node.right.right,并且Node.left.right等于Node.right.left,并且通过递归的方式,对每层的节点都进行对比操作。

为了便于描述,我们以【输入】root = [4,2,2,6,9,9,6,1,7,8,6,6,8,7,1]为例,演示一下验证逻辑:

步骤1root.left是否等于root.right 【步骤2】 [root.left].left是否等于[root.rigjt].right [root.left].right是否等于[root.rigjt].left 【步骤3】 [root.left.left].left是否等于[root.right.right].right [root.left.left].right是否等于[root.right.right].left [root.left.right].left是否等于[root.right.left].right [root.left.right].right是否等于[root.right.left].left

四、代码实现

代码语言:javascript复制
class Solution {
    public boolean isSymmetric(TreeNode root) {
        if (root == null) return true;
        return compare(root.left, root.right);
    }
    public boolean compare(TreeNode node1, TreeNode node2) {
        if (node1 == null && node2 == null) return true;
        if (node1 == null || node2 == null || node1.val != node2.val) return false;
        return compare(node1.left, node2.right) && compare(node1.right, node2.left);
    }
}

0 人点赞