美文网首页图解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