当前位置: 首页 > news >正文

剑指 Offer 28. 对称的二叉树

剑指 Offer 28. 对称的二叉树

难度:easy\color{Green}{easy}easy


题目描述

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

例如,二叉树 [1,2,2,3,4,4,3] 是对称的。
在这里插入图片描述

但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
在这里插入图片描述

示例 1:

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

示例 2:

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

限制:

0<=节点个数<=10000 <= 节点个数 <= 10000<=节点个数<=1000

注意:本题与主站 101 题相同:https://leetcode-cn.com/problems/symmetric-tree/


算法

(递归)

对称二叉树定义:

  • 对于树中 任意两个对称节点 L 和 R ,一定有:

    • L.val=R.val :即此两对称节点值相等。
    • L.left.val=R.right.val :即 L 的 左子节点 和 R 的 右子节点 对称;
    • L.right.val=R.left.val :即 L 的 右子节点 和 R 的 左子节点 对称。
  • 根据以上规律,考虑从顶至底递归,判断每对节点是否对称,从而判断树是否为对称二叉树。

在这里插入图片描述


mirrTree(TreeNode* a, TreeNode* b)

终止条件:

  • 当 L 和 R 有一个为空的时候: 判断如果此时都为空,返回 true,否则返回 false;

递推工作:

  • 判断两节点 L.left 和 R.right 是否对称,即 mirrTree(L.left, R.right) ;
  • 判断两节点 L.right 和 R.left 是否对称,即 mirrTree(L.right, R.left) ;

返回值: 两对节点都对称时,才是对称树,因此用与逻辑符 && 连接。

isSymmetric(root) :

  • 特例处理: 若根节点 root 为空,则直接返回 true 。
  • 返回值: 即 mirrTree(root.left, root.right) ;

复杂度分析

  • 时间复杂度O(n)O(n)O(n),其中 nnn 是二叉树的节点数量。

  • 空间复杂度 : 最差情况下(见下图),二叉树退化为链表,系统使用 O(n)O(n)O(n) 大小的栈空间。

在这里插入图片描述

C++ 代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:bool isSymmetric(TreeNode* root) {if (!root) return true;return mirrTree(root->left, root->right);}bool mirrTree(TreeNode* a, TreeNode* b) {if (!a || !b) return !a && !b;if (a->val != b->val) return false;return mirrTree(a->left, b->right) && mirrTree(a->right, b->left);}
};

相关文章:

剑指 Offer 28. 对称的二叉树

剑指 Offer 28. 对称的二叉树 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 请实现一个函数&#xff0c;用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样&#xff0c;那么它是对称的。 例如&#xff0c;二叉树 [1,2,2,3,4,4,3] 是对称的。 但是下…...

深入Spring底层透析后置处理器之豁然开朗篇

目录前言Spring的后置处理器Bean工厂后置处理器Bean后置处理器自定义Component实现注解开发前言 看这篇文章之前&#xff0c;需要了解Bean创建的过程&#xff0c;本篇文章是接着bean创建的基本流程的续写 Bean创建的基本过程&#xff1a;http://t.csdn.cn/1lK2d Spring的后置处…...

软件测试(基础定义篇)

测试基础 1、什么是软件测试&#xff1f;2、常见的测试分类3、质量模型 4、软件测试流程 5、测试用例 6、测试用例设计方法 )1、什么是软件测试&#xff1f; 1、什么是软件&#xff1f; 答&#xff1a;软件是控制计算机硬件工作的工具。 2、软件的组成&#xff1f; 3、什么是…...

华为OD机试 - 寻找目标字符串 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...

使用echart绘制中国地图并显示人数

文章目录引言效果如图所示vue中echarts4.9版本&#xff0c;地图的使用引言 在做毕设的过程中&#xff0c;有一个需求&#xff1a;根据用户的ip&#xff0c;在前端展示出中国地图&#xff0c;然后展现出每个省有多少人这样子 经过百度后&#xff0c;发现可以使用echart来完成该…...

Git的常用命令

1&#xff1a;软件安装1.1&#xff1a;Git下载与安装百度上搜索Git官网&#xff1a;https://git-scm.com/下载&#xff1a;https://git-scm.com/download/win下载Git安装程序&#xff0c;双击安装 Git-2.9.3.2-64-bit.exe配置环境变量path 使用git --version查看 git 是否安装成…...

AcWing1018.最低通行费

1018.最低通行费一个商人穿过一个 NN 的正方形的网格&#xff0c;去参加一个非常重要的商务活动。他要从网格的左上角进&#xff0c;右下角出。每穿越中间 1 个小方格&#xff0c;都要花费 1 个单位时间。商人必须在 (2N−1)(2−1) 个单位时间穿越出去。而在经过中间的每个小方…...

【面试题】vue中的插槽是什么?

大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库一、slot是什么在HTML中 slot 元素 &#xff0c;作为 Web Components 技术套件的一部分&#xff0c;是Web组件内的一个占位符该占位符可以在后期…...

Go语言结构体struct详解,Go空结构体的这些妙用你知道吗?

本文详解了Go语言结构体的各个知识点&#xff0c;最后介绍了空结构体的3种妙用。希望对你有帮助。 定义 结构体&#xff0c;是一种自定义的数据类型&#xff0c;由多个数据类型组合而成。用于描述一类事物相关属性。 定义方式&#xff1a; type 类型名 struct {字段名 字段类…...

华为OD机试 - 航天器(Python) | 机试题+算法思路+考点+代码解析 【2023】

航天器 题目 给航天器一侧加装长方形和正方形的太阳能板(图中的斜线区域); 需要先安装两个支柱(图中的黑色竖条); 再在支柱的中间部分固定太阳能板; 但航天器不同位置的支柱长度不同; 太阳能板的安装面积受限于最短一侧的那支支柱的长度; 现提供一组整型数组的支柱高度数据;…...

【Optional】告别丑陋判空,使用Optional类

一、概述 当项目中充斥着大量的、丑陋的判空语句&#xff0c;如下&#xff1a; if (user ! null) {Address address user.getAddress();if (address ! null) {Country country address.getCountry();if (country ! null) {String isocode country.getIsocode();if (isocod…...

魔兽世界服务端端新手搭建教程

明杰也是很久以前开始研究魔兽服务器架设&#xff0c;主要原因是亚服经常要排队6-7个小时&#xff0c;去不排除的服和单机没啥区别&#xff0c;以怀旧服玩到10级以后就开始玩335端&#xff0c;一开始也和新入手的人一样云里雾里的&#xff0c;经过长时间的学习总算有点成就,向新…...

宝塔搭建实战人才求职管理系统mobile手机端vue源码(五)

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 上一期给大家分享骑士cms会员管理member前端vue在本地运行打包、宝塔发布部署的方式&#xff0c;本期给大家分享&#xff0c;mobile移动端vue怎么在本地运行&#xff0c;打包&#xff0c;实现线上功能更新替换的方…...

生态应用:探讨 NGINX 与上下游系统集成时的开发经验

NGINX 作为一款高性能的 Web 服务器和反向代理服务器&#xff0c;在各种应用场景中广泛应用。随着业务的发展&#xff0c;我们在使用 NGINX 时&#xff0c;可能需要将其与其他系统进行集成&#xff0c;以实现更加复杂的业务需求。 本文将结合实际应用场景&#xff0c;探讨 NGI…...

ArcGIS批量拼接大量栅格遥感影像:Mosaic工具

本文介绍在ArcGIS下属的ArcMap软件中&#xff0c;基于Mosaic工具&#xff0c;批量对大量栅格遥感影像文件加以拼接、镶嵌的方法。 在GIS应用中&#xff0c;我们时常需要对大量栅格遥感影像数据加以批量拼接的工作。这一步骤可以基于Python语言实现&#xff0c;具体可以参考文章…...

Flink UI部署jar包报错

错误描述&#xff1a; 通过Flink的UI中的Submit New Job菜单添加jar包的时候提示报错。报错信息的关键字是“The LocalStreamEnvironment cannot be used when submitting a program through a client, or running in a TestEnvironment context”&#xff0c;最关键的是“Loc…...

Linux就该这么学:RAID与LVM磁盘阵列技术

这里写目录标题 7.1.1 部署磁盘阵列7.1.2 损坏磁盘阵列及修复7.1.3 磁盘阵列+备份盘7.1.4 删除磁盘阵列1. 需要将所有的磁盘都设置成停用状态:2. 逐一移除出去3. 续停用整个RAID磁盘阵列7.2 LVM逻辑卷管理器7.2.1 部署逻辑卷7.2.2 扩容逻辑卷7.2.3 缩小逻辑卷7.2.4 逻辑卷快照…...

Prometheus+Grafana监控

1、简介1.1 Prometheus官网地址&#xff1a;https://prometheus.io/Prometheus是一个开源的监控系统&#xff0c;起源于SoundCloud。它由以下几个核心组件构成&#xff1a;数据爬虫&#xff1a; 根据配置的时间定期的通过HTTP抓去metrics数据。time-series 数据库&#xff1a; …...

【JUC2022】第三章 线程中断与 LockSupport

【JUC2022】第三章 线程中断与 LockSupport 文章目录【JUC2022】第三章 线程中断与 LockSupport一、线程中断1.什么是中断机制2.中断 API3.代码实现4.Thread.sleep()二、LockSupport1.什么是 LockSupport2.代码实现3.总结一、线程中断 1.什么是中断机制 首先&#xff0c;一个…...

数据结构刷题(七):202快乐数、1两数之和、454四数相加II、15三数之和、18四树之和

1.快乐数题目链接思路&#xff1a;使用set&#xff0c;当set中出现相同元素时&#xff0c;返回false注意&#xff1a;while循环中语句顺序&#xff1b; 除数取余。解法&#xff1a;public boolean isHappy(int n){Set<Integer> res new HashSet<>();int[] arr ne…...

Typora风格文档化:使用Markdown实时记录PyTorch 2.8实验过程

Typora风格文档化&#xff1a;使用Markdown实时记录PyTorch 2.8实验过程 1. 为什么需要实验过程文档化 在深度学习研究领域&#xff0c;实验过程的可复现性一直是个老大难问题。很多研究者都有这样的经历&#xff1a;三个月前跑的实验&#xff0c;现在想复现结果&#xff0c;…...

Qwen3-Embedding-4B GPU算力优化:CUDA Stream并发执行向量化与相似度计算,吞吐提升1.8倍

Qwen3-Embedding-4B GPU算力优化&#xff1a;CUDA Stream并发执行向量化与相似度计算&#xff0c;吞吐提升1.8倍 1. 引言&#xff1a;当语义搜索遇上性能瓶颈 想象一下&#xff0c;你正在使用一个智能语义搜索工具&#xff0c;输入“我想吃点东西”&#xff0c;它立刻为你找到…...

别再浪费手机性能了!Blackmagic Camera 搭配 LUT 滤镜包,解锁夜景和人物拍摄的隐藏技巧

Blackmagic Camera 与 LUT 滤镜包&#xff1a;解锁手机摄影的隐藏潜力 手机摄影早已不再是简单的记录工具&#xff0c;而是可以创作出专业级影像的利器。对于追求画质的摄影爱好者和小型工作室来说&#xff0c;Blackmagic Camera 这款专业级拍摄应用配合精心调校的 LUT 滤镜包&…...

如何用AI将视频从24FPS提升到120FPS?Video2X帧插值技术全解析

如何用AI将视频从24FPS提升到120FPS&#xff1f;Video2X帧插值技术全解析 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/v…...

告别黑屏和错位!Uniapp视频轮播最佳实践:巧用v-if与swiper事件实现无缝切换

Uniapp视频轮播组件深度优化&#xff1a;从黑屏错位到无缝体验的全链路解决方案 在移动应用开发中&#xff0c;视频轮播组件已经成为提升用户参与度的关键元素。然而&#xff0c;当Uniapp开发者尝试在swiper组件中嵌入视频时&#xff0c;常常会遇到视频位置偏移、黑屏闪现、自动…...

3步搞定iOS微信聊天记录完整导出:WeChatExporter终极指南

3步搞定iOS微信聊天记录完整导出&#xff1a;WeChatExporter终极指南 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 还在为无法备份微信聊天记录而烦恼吗&#xff1f;微…...

寒冬降临:当资本撤出AI测试赛道

2026年初&#xff0c;全球资本市场对AI技术的狂热投资骤然降温。随着VC基金转向更保守的资产配置&#xff0c;依赖融资的AI测试工具开发商面临生存危机&#xff1a;初创公司批量裁员&#xff0c;开源项目停止维护&#xff0c;企业采购的智能测试平台因无法续约沦为“断线木偶”…...

【笔试真题】- 招商银行-2026.03.30

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围在线刷题 bishipass.com 招商银行-2026.03.30 1. 术语接龙计分 问题描述 招商银行的培训平台里有一个简化版“术语接龙”小游戏。 系统维护了一份单词表,并给定一个当前单词。用户之…...

Modbus协议详解:从原理到工业应用实践

1. Modbus协议概述Modbus是一种应用层报文传输协议&#xff0c;由Modicon公司&#xff08;现为施耐德电气旗下品牌&#xff09;于1979年开发。作为工业自动化领域最广泛采用的通信协议之一&#xff0c;它定义了控制器设备之间交换信息的通用语言。关键特性&#xff1a;协议标准…...

STMPE811电阻触摸屏驱动设计与实现

1. 项目概述TS_DISCO_F429ZI 是专为 STMicroelectronics STM32F429ZI 探索套件&#xff08;DISCO_F429ZI&#xff09;设计的触摸屏驱动类&#xff0c;其核心职责是抽象并控制该开发板上集成的 LCD 模块所搭载的电阻式触摸屏控制器。该类并非通用型触摸驱动&#xff0c;而是深度…...