【树】-Lc101-对称二叉树(一棵树是否是另一棵树的子树的变形)

写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。



一、场景描述

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

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

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

二、具体步骤

1.环境说明

名称 说明
IntelliJ IDEA 2019.2

2.代码

以下为Java版本实现:

public class Lc101_IsSymmetric {

    public static void main(String[] args) {
        TreeNode nodeFour = new TreeNode(4);
        TreeNode nodeThree = new TreeNode(3);
        TreeNode nodeTwo = new TreeNode(2);
        nodeTwo.left = nodeFour;
        nodeTwo.right = nodeThree;

        TreeNode node4 = new TreeNode(4);
        TreeNode node3 = new TreeNode(3);
        TreeNode node2 = new TreeNode(2);
        node2.left = node3;
        node2.right = node4;

        TreeNode root = new TreeNode(1);
        root.left = node2;
        root.right = nodeTwo;

        System.out.println(isSymmetric(root));
    }


    /**
     * 思路:递归
     * 返回值是boolean
     *
     * 将当前结点的left和right分别当作2个二叉树进行递归,比较2边的结点是否对称(思路和一个二叉树是否是另一个二叉树的子树类似)
     * 2个结点的比较
     *
     * 判断是否镜像,比较左子树的左节点和右子树的右节点是否相同
     *
     * @param root
     * @return
     */
    private static boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return false;
        }

        return isSymmetric(root.left, root.right);
    }

    /**
     * 比较2棵子树是否对称
     *
     * @param t1
     * @param t2
     * @return
     */
    private static boolean isSymmetric(TreeNode t1, TreeNode t2) {
        // 循环结束条件
        if (t1 == null && t2 == null) {
            return true;
        }

        if (t1 == null || t2 == null || t1.val != t2.val) {
            return false;
        }

        return isSymmetric(t1.left, t2.right) && isSymmetric(t1.right, t2.left);
    }


    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        public TreeNode(int val) {
            this.val = val;
        }
    }
}


写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

相关推荐

  1. 力扣 572.

    2024-03-14 05:42:05       38 阅读
  2. Leetcode 572

    2024-03-14 05:42:05       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 05:42:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 05:42:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 05:42:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 05:42:05       18 阅读

热门阅读

  1. OpenCV-图像基础处理

    2024-03-14 05:42:05       18 阅读
  2. JUNIT5+Mockito单元测试

    2024-03-14 05:42:05       20 阅读
  3. LeetCode_27_简单_移除元素

    2024-03-14 05:42:05       17 阅读
  4. 【Educoder数据挖掘实训】相似度与相异度

    2024-03-14 05:42:05       14 阅读
  5. 在阿里云上配置开放端口的详细教程

    2024-03-14 05:42:05       20 阅读
  6. 基于qt和css的MP3音乐播放器引擎开发

    2024-03-14 05:42:05       17 阅读
  7. 分布式ID(8):分布式ID生成方法

    2024-03-14 05:42:05       22 阅读
  8. .NET中使用Redis大全

    2024-03-14 05:42:05       19 阅读
  9. volatile关键字用处和场景?

    2024-03-14 05:42:05       18 阅读
  10. 17 OpenCv Canny算子

    2024-03-14 05:42:05       16 阅读
  11. HiveQL详解

    2024-03-14 05:42:05       18 阅读
  12. 视频测试示例

    2024-03-14 05:42:05       13 阅读
  13. 什么是池架构?

    2024-03-14 05:42:05       15 阅读
  14. OpenCV加载视频

    2024-03-14 05:42:05       18 阅读