美文网首页图解LeetCode算法
图解LeetCode——剑指 Offer 28. 对称的二叉树

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

作者: 爪哇缪斯 | 来源:发表于2023-02-17 09:00 被阅读0次

一、题目

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

二、示例

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]为例,演示一下验证逻辑:

图片

步骤1
root.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

四、代码实现

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);
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(o)/ ~ 「干货分享,每天更新」

相关文章

网友评论

    本文标题:图解LeetCode——剑指 Offer 28. 对称的二叉树

    本文链接:https://www.haomeiwen.com/subject/khpmkdtx.html