给定一棵二叉树,判断这棵树是否是对称的。对称的含义是:这棵树的左子树和右子树在结构上是镜像对称的,且对应节点的值相等。

示例 1:

    1/ \2   2/ \ / \
3  4 4  3输出:true

示例 2:

    1/ \2   2\   \3    3输出:false

二、应用场景

  • • 用户界面或布局中验证左右对称性
  • • 算法竞赛题目或笔试面试常考
  • • 树结构可视化或分析工具中,对称性判断用于简化处理

三、解题思路

本问题的关键在于:比较树的左子树和右子树是否镜像对称

我们可以采用两种方法:

方法一:递归判断

判断左右子树是否满足以下三个条件:

  1. 1. 左子树的左子树和右子树的右子树对称;
  2. 2. 左子树的右子树和右子树的左子树对称;
  3. 3. 当前两个节点值相同。

方法二:迭代判断(借助队列)

使用队列存储成对的节点,每次成对弹出并比较:

  • • 若都为空,继续;
  • • 若一个为空另一个不为空 → 不对称;
  • • 值不相等 → 不对称;
  • • 否则将子节点成对压入队列,继续判断。

四、Go语言实现

1. 数据结构定义

package mainimport "fmt"type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}

2. 方法一:递归法

func isSymmetric(root *TreeNode) bool {if root == nil {return true}return isMirror(root.Left, root.Right)
}func isMirror(left, right *TreeNode) bool {if left == nil && right == nil {return true}if left == nil || right == nil {return false}if left.Val != right.Val {return false}return isMirror(left.Left, right.Right) && isMirror(left.Right, right.Left)
}

3. 方法二:迭代法(使用队列)

func isSymmetricIterative(root *TreeNode) bool {if root == nil {return true}queue := []*TreeNode{root.Left, root.Right}for len(queue) > 0 {left := queue[0]right := queue[1]queue = queue[2:]if left == nil && right == nil {continue}if left == nil || right == nil || left.Val != right.Val {return false}queue = append(queue, left.Left, right.Right)queue = append(queue, left.Right, right.Left)}return true
}

五、测试样例

func main() {// 构建对称二叉树root := &TreeNode{Val: 1}root.Left = &TreeNode{Val: 2}root.Right = &TreeNode{Val: 2}root.Left.Left = &TreeNode{Val: 3}root.Left.Right = &TreeNode{Val: 4}root.Right.Left = &TreeNode{Val: 4}root.Right.Right = &TreeNode{Val: 3}fmt.Println("递归判断结果:", isSymmetric(root))           // truefmt.Println("迭代判断结果:", isSymmetricIterative(root)) // true
}

六、复杂度分析

方式时间复杂度空间复杂度
递归法O(n)O(h)
迭代法O(n)O(n)
  • • n 表示节点数量;
  • • h 表示树的高度(递归调用栈的深度);
  • • 迭代方法使用了队列,需要额外 O(n) 空间存储节点。

七、可视化理解

将二叉树从中心线对折,看左、右两部分是否完全重合,节点值是否相等。

镜像对称结构满足:

  • • left.Left == right.Right
  • • left.Right == right.Left

八、变种与扩展

  1. 1. 判断 N 叉树是否镜像对称:需要成对比较左右子节点;
  2. 2. 输出是否对称的最小修改操作:可结合动态规划思想;
  3. 3. 判断对称层级:例如仅判断前两层是否对称。

九、总结

内容说明
核心判断条件左右子树是否镜像结构,对应节点值是否相等
递归 vs 迭代递归写法更直观,迭代适合大树或避免栈溢出
技巧点左-右子树配对判断,使用队列模拟递归过程
实用价值面试高频,掌握树结构对称性判断通用技巧

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习深度学习】为什么需要分布式训练?

目录 前言 一、模型规模爆炸:单卡GPU已难以承载 1.1 问题描述 1.2 面临挑战 1.3 解决方案:模型并行 (Model Parallelism) 1.4 类比理解:模型并行 1.5 模型并行的关键点 1.6 模型并行(Model Parallelism)的流程…

二十八、【Linux系统域名解析】DNS安装、子域授权、缓存DNS、分离解析、多域名解析

DNS服务深度解析:缓存、分离与多域名管理一、DNS服务架构全景DNS核心组件关系DNS服务器类型对比二、基础DNS服务配置1. Bind9核心配置文件2. 区域文件结构解析区域文件记录类型表三、子域授权与分层解析子域授权原理子域配置流程1. 父域配置2. 子域配置递归与迭代查…

【LeetCode】前缀表相关算法

目录1、介绍2、核心概念【1】前缀和后缀【2】最长公共前后缀(LPS)3、相关算法题【1】找出字符串中第一个匹配项的下标【2】重复的子字符串1、介绍 前缀表是一种在字符串匹配算法(特别是KMP算法)中使用的数据结构,用于…

(六) Spring AI 1.0版本 + 千问大模型+RAG

上篇文章我们大概讲了一下向量模型的知识&#xff0c;本篇文章&#xff0c;我们将会通过RAG实战的形式&#xff0c;来感受一下RAG。 项目准备 pom.xml 这里我们需要引入向量库和pdf相关的包<dependency><groupId>org.springframework.ai</groupId><artifa…

Spring Boot与Mybatis-Plus集成SQLServer的完整指南

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;本项目旨在演示如何将SQLServer与Spring Boot以及Mybatis-Plus框架进行整合&#xff0c;打造一个高效稳定的后端服务。详细介绍涉及了数据库连接、实体类定义、Mapper接口创建、Service层业务逻辑编写、Control…

【工作笔记】判断一条方法需不需要事务/AOP

① 看注解方法/类上有 Transactional → 需要事务&#xff0c;必须走代理方法/类上有自定义 AOP 注解&#xff08;如 Log、Retry、Cacheable 等&#xff09;→ 需要代理什么都没有 → 几乎肯定不需要示例需求Transactional public void generateDailyTask(...)✅ 需要事务publi…

Unity 的UI动画调节

在游戏开发中&#xff0c;精美的UI动画能极大提升用户体验。Unity提供了强大的动画系统&#xff0c;让开发者可以轻松创建流畅的界面动效。本文将介绍UI动画的核心概念、制作流程和实用技巧。一、核心动画组件Animation窗口 - 可视化创建关键帧动画Animator组件 - 控制动画状态…

26考研11408数据结构

数据结构 1.绪论1.1.1数据结构的基本概念 数据数据元素&#xff1a;数据的基本单位&#xff0c;一个数据元素由多个数据项组成&#xff0c;数据项是组成数据元素不可分割的最小单位数据对象&#xff1a;具有相同性质的数据元素的集合&#xff0c;是数据的一个子集数据类型&…

Solar月赛(应急响应)——攻击者使用什么漏洞获取了服务器的配置文件?

某某文化有限公司的运维小王刚刚搭建服务器发现cpu莫名的异常的升高请你帮助小王排查一下服务器。 文章目录事件介绍事件1&#xff1a;帮助小王找到是什么漏洞?事件2&#xff1a;系统每天晚上系统都会卡卡的帮小明找到问题出在了那&#xff1f;事件3&#xff1a;恶意域名是什么…

高频面试题

1.HashMap的底层原理JDK1.7版本之前&#xff0c;HashMap的底层数据结构是数组链表&#xff0c;HashMap通过哈希算法会将元素的key映射待数组的的槽位(Bucket)。如果多个键映射到同一个槽位&#xff0c;就会以链表的形式存储在同一个槽位上。但是链表的查询的复杂度O(n),所有冲突…

鱼皮项目简易版 RPC 框架开发(四)

本文为笔者阅读鱼皮的项目 《简易版 RPC 框架开发》的笔记&#xff0c;如果有时间可以直接去看原文&#xff0c; 1. 简易版 RPC 框架开发 前面的内容可以笔者的前面几篇笔记 鱼皮项目简易版 RPC 框架开发&#xff08;一&#xff09; 鱼皮项目简易版 RPC 框架开发&#xff08;二…

力扣-79.单词搜索

题目链接 79.单词搜索 class Solution {int m, n;public boolean exist(char[][] board, String word) {m board.length;n board[0].length;boolean[][] visited new boolean[m][n];// 遍历网格中的每个单元格作为搜索起点for (int i 0; i < m; i) {for (int j 0; j …

LabVIEW的To More Specific Class功能说明

​To More Specific Class 是 LabVIEW 中用于控件引用类型转换的关键函数。可将通用 GObject 引用&#xff0c;精准转为 Listbox、TreeControl 等特定控件类引用&#xff0c;让开发者能调用专属属性&#xff08;如获取列表行数&#xff09;&#xff0c;实现对不同控件类的差异化…

Ubuntu20.04安装和配置Samba实现Win11下共享文件夹

Samba是在Linux和UNIX系统上实现 SMB / CIFS 协议的开源软件&#xff0c;主要用于局域网内的文件共享和打印服务。Samba通过SMB/CIFS协议实现跨平台资源共享&#xff0c;支持匿名用户和本地用户访问共享目录&#xff0c;客户端主要为Windows系统。其核心进程包括&#xff1a; ‌…

设计模式(八)结构型:桥接模式详解

设计模式&#xff08;八&#xff09;结构型&#xff1a;桥接模式详解桥接模式&#xff08;Bridge Pattern&#xff09;是 GoF 23 种设计模式中的结构型模式之一&#xff0c;其核心价值在于将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。它通过“组合”而非“继承”…

【边缘填充】——图像预处理(OpenCV)

目录 1 边界复制&#xff08;BORDER_REPLICATE&#xff09; 2 边界反射&#xff08;BOEDER_REFLECT&#xff09; 3 边界反射101&#xff08;BORDER_REFLECT101&#xff09; 4 边界常数&#xff08;BORDER_CONSTANT&#xff09; 5 边界包裹&#xff08;BORDER_WRAP&#xf…

git同步到github出错-几个问题-一天晚上(2025.7.29)

访问不了github 代理和加速器都正常&#xff0c;但是就是访问不了这个网站尝试过几种方法都不行&#xff0c;后面突然可以了。 之后发现一种情况会不行&#xff1a;同时开启 同步不了 http连接 https://blog.csdn.net/m0_73972962/article/details/146198392 一堆问题 ssh连接才…

Redis未授权访问的利用的几种方法原理以及条件

一、redis通过定时任务反弹shell1.利用条件&#xff1a;需要能够登录redis数据库&#xff0c;并且redis以root用户运行。同时/var/spool/cron目录要具有写和执行权限。二、Redis主从getshell1.原理&#xff1a;在Redis 4.x之后&#xff0c;Redis新增了模块功能&#xff0c;通过…

DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进

&#x1f365; DNF 与 YUM 的区别详解&#xff1a;从 CentOS 7 到 CentOS 9 的演进标签&#xff1a;CentOS、YUM、DNF、Linux 包管理、系统升级、兼容性 适用版本&#xff1a;CentOS 7、CentOS 8、CentOS 9&#x1f9e9; 一、背景介绍 CentOS 中使用的包管理工具是 RedHat 系列…

mp核心功能

条件构造器mybatisPlus支持各种复杂的where条件, 满足日常的开发wrapper类就是条件构造器提供了很多子类条件构造器的用法&#xff1a;QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分UpdateWrapper和LambdaUpdateWrapper通常只有在set语句…