1月4日代码随想录对称二叉树

news2025/6/8 9:20:25

101.对称二叉树

101. 对称二叉树 - 力扣(LeetCode)

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

示例 1:

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

示例 2:

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

提示:

  • 树中节点数目在范围 [1, 1000] 内
  • -100 <= Node.val <= 100

进阶:你可以运用递归和迭代两种方法解决这个问题吗?

思路

递归法

这道题的重点就是检查根节点的左子树是否与右子树的反转相同,开始想的是前序遍历和后序遍历的反转比较,但是好像不太对而且可能没有唯一性,所以我们使用递归法比较直观。

那么我们应该同时对左右子树的内侧或者外侧进行递归,结束条件有:1、左右节点均为空视为对称2、左右节点有一为空视为不对称3、左右节点值不相同视为不对称。

在判断完结束条件之后正式进入递归过程,在这个时候,假设左右节点都有左右子节点,那么根据翻转,我们需要对左左&右右,左右&右左继续进行遍历,返回两次遍历返回值的交。

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root==null){
            return true;
        }
        return dfs(root.left,root.right);
    }
    public boolean dfs(TreeNode left, TreeNode right){
        if(left==null&&right==null){
            return true;
        }
        if(left==null||right==null){
            return false;
        }
        if(left.val!=right.val){
            return false;
        }
        return dfs(left.left,right.right)&&dfs(left.right,right.left);
    }
}

迭代法

我们也可以使用队列来完成这道题,怎样去判断是否对称呢?我们可以在加入根节点的左右子节点后,每次添加队列都是将队首的两个节点的对称的子节点双双加入队列,出队也是两个两个出,在同时也加入判空等操作。

class Solution {
	public boolean isSymmetric(TreeNode root) {
		if(root==null || (root.left==null && root.right==null)) {
			return true;
		}
		//用队列保存节点
		LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
		//将根节点的左右孩子放到队列中
		queue.add(root.left);
		queue.add(root.right);
		while(queue.size()>0) {
			//从队列中取出两个节点,再比较这两个节点
			TreeNode left = queue.removeFirst();
			TreeNode right = queue.removeFirst();
			//如果两个节点都为空就继续循环,两者有一个为空就返回false
			if(left==null && right==null) {
				continue;
			}
			if(left==null || right==null) {
				return false;
			}
			if(left.val!=right.val) {
				return false;
			}
			//将左节点的左孩子, 右节点的右孩子放入队列
			queue.add(left.left);
			queue.add(right.right);
			//将左节点的右孩子,右节点的左孩子放入队列
			queue.add(left.right);
			queue.add(right.left);
		}
		
		return true;
	}
}

总结

迭代和递归两种方法,深搜广搜两种方法,写起来简单,想起来还需要有一定的理解熟练度。

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

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

相关文章

面试算法89:房屋偷盗

题目 输入一个数组表示某条街道上的一排房屋内财产的数量。如果这条街道上相邻的两幢房屋被盗就会自动触发报警系统。请计算小偷在这条街道上最多能偷取到多少财产。例如&#xff0c;街道上5幢房屋内的财产用数组[2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;3]表示…

【JVM面试题】Java中的静态方法为什么不能调用非静态方法

昨晚京东大佬勇哥在群里分享了一道他新创的JVM面试题&#xff0c;我听完后觉得还挺有意思的&#xff0c;分享给大家 小佬们先别急着看我的分析&#xff0c;先自己想想答案 你是不是想说 因为静态方法是属于类的&#xff0c;而非静态方法属于实例对象 哈&#xff0c;有人这样回答…

【解决openGauss无法使用gs_check等服务器端命令问题】

【解决openGauss无法使用gs_check等服务器端命令问题】 一、问题描述二、问题原因三、解决方法 一、问题描述 [ommopengauss03 ~]$ gs_check -i CheckCPU Parsing the check items config file successfully [GAUSS-53026]: ERROR: Execute SSH command on host 192.168.56.19…

什么是设备树?

一. 简介 前面只是简单使用过设备树文件&#xff0c;接下来详细谈一谈设备树。掌握设备树是 Linux 驱动开发人员必 备的技能&#xff01; 因为在新版本的 Linux 中&#xff0c;ARM 相关的驱动全部采用了设备树(也有支持老式驱动的&#xff0c;比较少)&#xff0c;最新出的 CP…

打地鼠python程序设计说明,打地鼠游戏界面设计

这篇文章主要介绍了打地鼠python程序设计说明&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 Pygame库是专门为了帮助做出的游戏和其他多媒体应用Python编程语言的一个开放源代…

PyQt学习笔记

文章目录 1 环境搭建1.1 安装PyQt51.1.1 安装1.1.2 验证 1.2 安装PyInstaller1.3 安装PySide1.4 安装InnoSetup1.5 PyCharm配置外部工具1.5.1 PyCharm配置PyLUpdate1.5.2 PyCharm配置QtLinguist1.5.3 PyCharm配置QtDesigner1.5.4 PyCharm配置PyUIC1.5.5 PyCharm配置PyRCC1.5.6 …

SCPMA最新研究论文推荐!中国移动玻色量子发布联合研究成果

《中国科学&#xff1a;物理学 力学 天文学》英文版(SCIENCE CHINA Physics, Mechanics & Astronomy, SCPMA)出版中移(苏州)软件技术有限公司闻经纬和钱岭团队与北京玻色量子文凯团队的研究成果&#xff0c;文章题为“Optical experimental solution for the multiway numb…

win10搭建keras深度学习框架

在Win10系统上安装Keras&#xff0c;你可以按照以下步骤进行&#xff1a; 安装Python环境--建议安装Anaconda3&#xff0c;可以从官方网站下载对应版本的安装程序进行安装。一步一步的next就行了。安装完成后把根目录下的scripts目录加入path系统变量。 使用pip命令安装Tensor…

d3dcompiler_43.dll丢失怎么修复?怎么解决

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到d3dcompiler_43.dll文件”。那么&#xff0c;d3dcompiler_43.dll是什么文件&#xff1f;它的作用是什么&#xff1f;如果缺失了该如何修复呢&#xff1f;本文将详细介绍d3dcompiler_…

《Linux系统与网络管理》复习题库---简答题

1、简述这些分区的名字以及各自的作用。 答&#xff1a; /boot 存放内核镜像的地方&#xff0c;这个文件夹独立分区的意义在于降低不能开机的风险。 /根目录&#xff0c;一般采用 ext3 文件系统&#xff0c;分区的容量一定要大于安装软件包的容量。 /usr 多数软件的默认安装的地…

如何对APP进行安全加固

引言 如今&#xff0c;移动应用市场蓬勃发展&#xff0c;APP数量呈现爆炸性增长。随着5G技术的广泛应用&#xff0c;APP的增长趋势持续增强。然而&#xff0c;由于APP的泛滥&#xff0c;网络攻击者的目标也在逐渐转移&#xff0c;数亿的移动互联网用户面临着病毒攻击的威胁&am…

Mysql 重要知识点1(含面试题1)

Mysql 知识点较多&#xff0c;这里涵盖了基本知识点&#xff0c;包括SQL语句 、重要面试题等。后面还有几章Mysql的知识点&#xff0c;分别是刷题总结与进阶优化SQL 面试题等。 目录 Mysql 安装Mysql 重要知识点SQL 重要语句面试题精选 Mysql 安装 1.官网下载mysql5.7版本压缩…

Vue 中的 ref 与 reactive:让你的应用更具响应性(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

张驰咨询:ZENNER真兰标杆展示——2023年六西格玛DMAIC项目出色落下帷幕

告别了旧年&#xff0c;我们跨入了新的一年&#xff01;ZENNER在23年初启动的DMAIC项目在2023年12月25日迎来了总结、收获成果的发布会。 ZENNER真兰集团中国区总裁杨燕明先生&#xff0c;张驰咨询公司的两位精益六西格玛黑带大师专家张驰老师和朱成朝老师&#xff0c;以及真诺…

【教学类-09-04】20240102《游戏棋N*N》数字填写,制作棋子和骰子

作品展示 背景需求&#xff1a; 最近在清理学具材料库&#xff0c;找到一套1年多前的《N*N游戏棋》&#xff0c;把没有用完的棋盘拿出来&#xff0c;&#xff0c;想给大4班换花样&#xff0c;并把它们用掉。 程序代码在这里 【教学类-09-03】20221120《游戏棋10*10数字如何直接…

马蹄集oj赛(双周赛第十八次)

目录 幸运的3 打靶 照亮街道 九次九日九重色 寻找串 竹鼠的白色季节 捉迷藏 好的三连 三角数 买马 可怜的小码哥 花园浇水 高次方程 幸运的3 难度:黄金时间限制: 1秒四占用内存:128M 你有 n 个数&#xff0c;可以将它们两两匹配(即将两数首尾相连)&#xff0c;每个…

基于springboot公租房申请管理系统

开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven…

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError

【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError 文章目录 【mujoco】Ubuntu20.04中解决mujoco报错raise error.MujocoDependencyError1. 报错的具体情况2. 解决过程3. 其他问题3.1 ModuleNotFoundError: No module named OpenGL3.2 ModuleNotFoundEr…

固定差价没有发展起来,Anzo Capital一语道破

正所谓没有对比就没有伤害&#xff0c;固定差价被浮动差价所取代那也是时代发展的必然结果。固定差价没有发展起来&#xff0c;Anzo Capital今天一语道破。 其实在今天很少有外汇经纪人提供固定的差价。浮动差价变得如此受欢迎&#xff0c;以至于它几乎完全取代了固定差价。那…

从零开始学习Nginx

下载 nginx下载地址&#xff1a;http://nginx.org/en/download.html 启动 双击nginx.exe。打开cmd命令窗口&#xff0c;切换到nginx解压目录下&#xff0c;输入命令 nginx.exe &#xff0c;回车即可 PS&#xff1a;如果安装目录是中文的情况&#xff0c;打开exe文件时会报…