【二叉树】Leetcode 101. 对称二叉树【简单】

news2025/1/11 18:06:17

对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例1:
在这里插入图片描述

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

解题思路

判断一棵二叉树是否是轴对称的,可以通过递归方式进行判断。

  • 1、定义一个递归函数isMirror,用于判断两个节点是否是镜像对称的。
  • 2、判断当前节点的左子树和右子树是否是镜像对称的。
  • 3、如果左子树和右子树都为空,返回true。
  • 4、如果左子树和右子树其中一个为空,返回false。
  • 5、如果左子树的值等于右子树的值,
    并且左子树的左子树与右子树的右子树镜像对称,
    左子树的右子树与右子树的左子树镜像对称,
    则返回true,否则返回false。

Java实现

public class SymmetricTree {
    
    static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int val) {
            this.val = val;
        }
    }

    public boolean isSymmetric(TreeNode root) {
        if (root == null) {
            return true; // 空树是对称的
        }
        return isMirror(root.left, root.right);
    }

    private boolean isMirror(TreeNode left, TreeNode right) {
        // 如果两个节点都为空,是对称的
        if (left == null && right == null) {
            return true;
        }
        // 如果其中一个节点为空,另一个不为空,不对称
        if (left == null || right == null) {
            return false;
        }
        // 递归比较左子树的左节点和右子树的右节点,以及左子树的右节点和右子树的左节点
        return (left.val == right.val) && isMirror(left.left, right.right) && isMirror(left.right, right.left);
    }

    // 测试实例
    public static void main(String[] args) {
        // 构造对称的二叉树:    1
        //                   / \
        //                  2   2
        //                 / \ / \
        //                3  4 4  3
        TreeNode symmetricTree = new TreeNode(1);
        symmetricTree.left = new TreeNode(2);
        symmetricTree.right = new TreeNode(2);
        symmetricTree.left.left = new TreeNode(3);
        symmetricTree.left.right = new TreeNode(4);
        symmetricTree.right.left = new TreeNode(4);
        symmetricTree.right.right = new TreeNode(3);

        // 创建 SymmetricTreeChecker 实例
        SymmetricTree checker = new SymmetricTree();

        // 检查对称的二叉树
        boolean isSymmetric = checker.isSymmetric(symmetricTree);
        System.out.println("是否是对称二叉树: " + isSymmetric);

        // 构造非对称的二叉树:      1
        //                      / \
        //                     2   2
        //                      \   \
        //                       3    3
        TreeNode asymmetricTree = new TreeNode(1);
        asymmetricTree.left = new TreeNode(2);
        asymmetricTree.right = new TreeNode(2);
        asymmetricTree.left.right = new TreeNode(3);
        asymmetricTree.right.right = new TreeNode(3);

        // 检查非对称的二叉树
        boolean isAsymmetric = checker.isSymmetric(asymmetricTree);
        System.out.println("是否是对称二叉树: " + isAsymmetric);
    }
}

时间空间复杂度

  • 时间复杂度:O(n),其中n是二叉树中的节点数,每个节点都需要访问一次。
  • 空间复杂度:O(height),其中height是二叉树的高度,递归调用栈的深度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1561300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】C++入门第二课(函数重载 | 引用 | 内联函数 | auto关键字 | 指针空值nullptr)

目录 前言 函数重载 概念 重载函数的条件 C支持重载函数的原理--名字修饰 引用 概念 特性 常引用(const引用) 使用场景 传值,传引用效率比较 引用和指针的区别 内联函数 概念 特性 auto关键字(C11) a…

javaWeb项目-家政服务管理系统功能介绍

项目关键技术 开发工具:IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架:ssm、Springboot 前端:Vue、ElementUI 关键技术:springboot、SSM、vue、MYSQL、MAVEN 数据库工具:Navicat、SQLyog 1、B/S结构简介 B/S…

OpenHarmony实战:使用宏、std::bind 巧妙实现进出函数日志打印

背景 我们始终渴望了解模块的调用、时序逻辑,每个人都会轻易地想到在函数的入口打印一条进入 enter 相关的日志,在函数的出口打印一条离开 leave 相关的日志。不能有遗漏,我们会复制这条日志到所有关心的函数中,为了表明是哪个模…

网络以太网之(1)基础概念

网络以太网之(1)基础概念 Author: Once Day Date: 2024年4月1日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文档可参考专栏:通信网络技术_Once-Day的…

EI会议相当于国内什么期刊?

EI工程索引收录类型有EI期刊和EI会议,EI会议水平是比较高的,也有的作者喜欢将EI会议与国内刊物作比较,那么EI会议相当于国内什么期刊?这主要看是什么级别的会议,顶尖学术会议相当于国内北大核心期刊。 EI会议应用范围和…

python怎么处理txt

导入文件处理模块 import os 检测路径是否存在,存在则返回True,不存在则返回False os.path.exists("demo.txt") 如果你要创建一个文件并要写入内容 #如果demo.txt文件存在则会覆盖,并且demo.txt文件里面的内容被清空,如…

系统架构图怎么画

画架构图是架构师的一门必修功课。 对于架构图是什么这个问题,我们可以按以下等式进行概括: 架构图 架构的表达 架构在不同抽象角度和不同抽象层次的表达,这是一个自然而然的过程。 不是先有图再有业务流程、系统设计和领域模型等&#…

哈希表(Hash Table) -- 用数组模拟--字符串前缀哈希

本文用于个人算法竞赛学习,仅供参考 目录 一.什么是哈希表 二.哈希函数中的取模映射 三.拉链法(数组实现) 四.拉链法模板 五.开放寻址法 六.开放寻址法模板 七.字符串前缀哈希 九.字符串前缀哈希 模板 十.题目 一.什么是哈希表 哈希表&…

fork复制进程

1.shell: 在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(command interpreter,命令解析器)。它类似于DOS下的COMMAND.COM和后来的cmd.exe。它接收用户命令&am…

C语言中入门到实战————动态内存管理

目录 前言 一、为什么要有动态内存分配 二、 malloc和free 2.1 malloc 2.2 free 三、calloc和realloc 3.1 calloc 3.2 realloc 四. 常见的动态内存的错误 4.1 对NULL指针的解引用操作 4.2 对动态开辟空间的越界访问 4.3 对非动态开辟内存使用free释放 4.4 使…

2024年【T电梯修理】考试题及T电梯修理考试内容

题库来源:安全生产模拟考试一点通公众号小程序 2024年【T电梯修理】考试题及T电梯修理考试内容,包含T电梯修理考试题答案和解析及T电梯修理考试内容练习。安全生产模拟考试一点通结合国家T电梯修理考试最新大纲及T电梯修理考试真题汇总,有助…

Collection与数据结构链表与LinkedList(三):链表精选OJ例题(下)

1. 分割链表 OJ链接 class Solution {public ListNode partition(ListNode head, int x) {if(head null){return null;//空链表的情况}ListNode cur head;ListNode formerhead null;ListNode formerend null;ListNode latterhead null;ListNode latterend null;//定义…

计算机网络数据链路层知识总结

物理层知识总结传送门 计算机网络物理层知识点总结-CSDN博客 功能 功能概述 一些基本概念 结点:主机、路由器链路﹔网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。数据链路︰网络中两个结点之间的逻辑通道&a…

Transformers -- 深入研究 - part 3

公众号:Halo咯咯,欢迎关注~ 前文回顾: Transformers -- 以通俗易懂的方式解释 - Part 1Transformers -- 未知英雄 - Part 2世界正在为人工智能和生成式人工智能而疯狂,特别是 2023 年的 ChatGPT 和大型语言模型。在我们讨论本系列后续部分的技术细节之前,让我们先从它的想…

移植day3

思维导图 重点README文档 1、解压tf-a源码 $> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz 2、进入tf-a源码目录 $> cd tf-a-stm32mp-2.2.r2 3、打补丁命令,作用:补丁文件中存放默认的一些配置文件,对于程序员来说,需要将补丁…

【c++初阶】类与对象(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

【前端】使用Web Audio API 技术播放音乐

简言 记录下使用web audio播放音乐的方法。 Web Audio API Web Audio API 提供了在 Web 上控制音频的一个非常有效通用的系统,允许开发者来自选音频源,对音频添加特效,使音频可视化,添加空间效果(如平移&#xff09…

CUDA从入门到放弃(十三):C++语言扩展 C++ Language Extensions

CUDA从入门到放弃(十三):C语言扩展 C Language Extensions 1 Function Execution Space Specifiers 函数执行空间指定符 这些指定符定义函数是在主机还是设备上执行,以及它们是否可以跨平台调用。 1-1 __global__ __global__指…

健身房预约管理系统(源码+文档)

健身房预约管理系统(小程序、ios、安卓都可部署) 文件包含内容程序简要说明含有功能:项目截图客户端首页我的预约登录教练预约时间我的注册页个人资料课程预约课程预约 管理端订单管理团课管理教练管理分类管理用户管理 文件包含内容 1、搭建…

[数据结构]排序

本篇主要是对常见排序的分类和一些排序的详解 一、插入排序 1.直接插入排序 // 直接插入排序函数 void insertionSort(int arr[], int n) {int i, key, j;for (i 1; i < n; i) {key arr[i]; // 取出待排序的元素j i - 1;// 将大于key的元素向后移动一位while (j > 0…