101. 对称二叉树及同类题

101. 对称二叉树

力扣题目链接(opens new window)

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

101. 对称二叉树

递归 

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
//递归
class Solution {public boolean compare(TreeNode left,TreeNode right){if(left == null && right == null) return true;//左右节点都为空else if(left != null && right == null) return false;//左不空,右空,不可能对称else if(left ==null && right != null) return false;//右不空,左空,不可能对称else if(left.val != right.val) return false;//左右都不为空,但不相等else{//左右都不为空,且相当,进入下一次的递归判断boolean out = compare(left.left,right.right);//左,右边树的外侧节点判断boolean inside = compare(left.right,right.left);//左,右边树的内侧节点判断return (out&& inside);}}public boolean isSymmetric(TreeNode root) {return compare(root.left,root.right);}
}

迭代 

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*///迭代
class Solution {public boolean isSymmetric(TreeNode root) {Stack<TreeNode> stack = new Stack<>();//栈辅助if(root == null) return true;stack.push(root.left);stack.push(root.right);while(!stack.isEmpty()){TreeNode left = stack.peek();//获得栈顶结点stack.pop();//弹出栈顶结点TreeNode right = stack.peek();//再次获得栈顶结点stack.pop();//再弹出栈顶结点if(left ==null&&right==null) continue;//左右都为空,继续下一次循环else if(left != null && right == null) return false;else if(left ==null && right != null) return false;else if(left.val != right.val) return false;else{//左右都不为空,且相等stack.push(left.left);stack.push(right.right);stack.push(left.right);stack.push(right.left);}}return true;}
}

2,力扣100,相同的树 

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例 1:输入:p = [1,2,3], q = [1,2,3]
输出:true
示例 2:输入:p = [1,2], q = [1,null,2]
输出:false
示例 3:输入:p = [1,2,1], q = [1,1,2]
输出:false提示:两棵树上的节点数目都在范围 [0, 100] 内
-104 <= Node.val <= 104
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSameTree(TreeNode p, TreeNode q) {if(p == null && q == null) return true;//左右节点都为空else if(p != null && q == null) return false;//左不空,右空,不可能对称else if(p ==null && q != null) return false;//右不空,左空,不可能对称else if(p.val != q.val) return false;//左右都不为空,但不相等else{//左右都不为空,且相当,进入下一次的递归判断boolean out = isSameTree(p.left,q.left);boolean inside = isSameTree(p.right,q.right);return (out&& inside);}}
}

3 力扣572,另一棵子树

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例 1:

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

示例 2:

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isSametree(TreeNode root,TreeNode subRoot){if(root == null && subRoot == null) return true;//左右节点都为空else if(root != null && subRoot == null) return false;//左不空,右空,不可能对称else if(root ==null && subRoot != null) return false;//右不空,左空,不可能对称else if(root.val != subRoot.val) return false;//左右都不为空,但不相等else{//左右都不为空,且相当,进入下一次的递归判断boolean out = isSametree(root.left,subRoot.left);boolean inside = isSametree(root.right,subRoot.right);return (out&& inside);}}public boolean isSubtree(TreeNode root, TreeNode subRoot) {if(root==null&&subRoot==null) return true;else if(root==null && subRoot!=null) return false;else if(root!=null && subRoot == null) return true;else if(isSametree(root,subRoot)) return true;else{return isSubtree(root.left,subRoot)||isSubtree(root.right,subRoot);}}}

 

 

 

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

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

相关文章

开源推荐榜【Pear Admin Flask 用python来创建后台管理系统】

最新技术高效快速开发&#xff0c;前后端分离模式&#xff0c;开箱即用。 核心模块包括&#xff1a;用户、角色、职位、组织机构、菜单、字典、日志、多应用管理、文件管理、定时任务等功能。 代码量少、学习简单、功能强大、轻量级、易扩展&#xff0c;轻松开发从现在开始&…

一个线程池的理解

最近看到一个线程池&#xff0c;写的实在太好&#xff0c;于是想深入理解一下。原始代码出处&#xff1a;GitHub - Ahajha/CTPL: Modern and efficient C Thread Pool Library 由于平时的工程一般只支持到C11,而拿到的代码应该是在C20下才能编译通过&#xff0c;因此也做了一些…

第二十三章 Git

一、Git Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版…

MIT6.828实验:Xv6 and Unix utilities

2023MIT6.828 lab-1 官方地址 一、sleep 实验内容 调用sleep&#xff08;系统调用&#xff09;编写用户级别程序能暂停特定时常的系统滴答程序保存在user/sleep.c 实验过程 xv6的参数传递 查看官方文档提示的文件中&#xff0c;多采用如下定义&#xff1a; int main(in…

【网站项目】三省学堂-学习辅助系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Redis中的Sentinel(一)

Sentinel 概述 Sentinel(哨岗、哨兵)是Redis的高可用性(high availability)解决方案:由一个或多个Sentinel实例(instance)组成的Sentinel系统(system)可以监视任意多个主服务器&#xff0c;以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时&#xff0…

OpenEuler/Centos制作离线软件源

需求背景&#xff1a; 一般线上服务器都是不能连接外网&#xff0c;服务器安装好系统之后就需要部署相关软件&#xff0c;此时因为无法联网导致无法下载软件&#xff0c;所以都会做一个本地的离线软件源&#xff0c;本文简单介绍如何快速利用已经下载好的rpm包&#xff0c;制作…

【C++】编程规范之性能优化

性能优化流程 找到性能热点代码 在进行性能优化之前&#xff0c;首先需要确定哪些部分是代码的性能热点。可以使用性能分析工具&#xff08;如 simpleperf&#xff09;生成火焰图&#xff0c;识别程序中的瓶颈。 确定性能问题、原因和优化方案 通过分析火焰图&#xff0c;确定…

JAVA毕业设计133—基于Java+Springboot+Vue的网上宠物店商城管理系统(源代码+数据库+12000字论文)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的网上宠物店商城管理系统(源代码数据库12000字论文)133 一、系统介绍 本项目前后端分离&#xff0c;分为管理员、用户两种角色 1、用户&#xff1a; 注册…

python-基础篇-字符串、列表、元祖、字典-字符串

文章目录 2.3字符串、列表、元祖、字典2.3.1字符串2.3.1.1字符串介绍2.3.1.1.1python中字符串的格式&#xff1a;2.3.1.1.2字符串在内存中的存储方式 2.3.1.2字符串的输入输出2.3.1.2.1字符串输出2.3.1.2.2字符串输入2.3.1.2.3组字符串的方式 2.3.1.3下标和切片2.3.1.3.1下标索…

Android 系统大致启动流程

Android启动流程大体为&#xff1a;BootRom -> BootLoader -> Kernel -> Init -> Zygote -> SystemServer ->Launcher 1、Loader层 1.1、Boot ROM 电源按下&#xff0c;引导芯片代码开始从预定义的地方&#xff08;固化在ROM&#xff09;开始执行&#xff0…

Unity入门

Unity入门学习 知识概述&#xff1a; Unity环境搭建 1.Unity引擎是什么 2.软件下载安装 下载最新的长期支持版即可 3.新工程和工程文件夹 Unity界面基础 1.Scene场景和Hierachy层级窗口 练习&#xff1a; 2.Game游戏和Project工程 3.Inspector检查和Console控制台 练习&#…

医疗器械5G智能制造工厂数字孪生可视化平台,推进行业数字化转型

医疗设备5G智能制造工厂数字孪生可视化平台&#xff0c;推进行业数字化转型。在数字化浪潮的推动下&#xff0c;医疗设备行业正迎来一场深刻的变革。5G技术的崛起&#xff0c;智能制造工厂的兴起&#xff0c;以及数字孪生可视化平台的出现&#xff0c;正在共同推动医疗设备行业…

英语语法总结(1)

名词 &#xff08;1&#xff09;专有名词China &#xff08;2&#xff09;普通名词{ 个体名词horse 集体名词people 物质名词fire 抽象名词labor }可数名词{ 个体名词a book 集体名词 My family is a large one(整体) My family are all music lovers(个体) &#xff08;若作为…

编程基础---C/C++基础知识

语法和语义 变量定义 基本数据类型&#xff1a;定义整型&#xff08;int、long、short&#xff09;、浮点型&#xff08;float、double&#xff09;、字符型&#xff08;char&#xff09;等基本数据类型的变量。 自定义类型&#xff1a;定义结构体、联合体、枚举等自定义类…

react组件:profiler

React Profiler 主要用于开发过程中的性能分析和优化&#xff0c;而不应在生产环境中使用&#xff0c;因为它可能会对性能产生一定的影响。 使用 包裹组件树&#xff0c;以测量其渲染性能。 ** id&#xff1a;字符串&#xff0c;用于标识正在测量的 UI 部分。 onRender&a…

Xshell Plus 详细安装教程以及附带使用图文教程

一、下载 Xshell Plus 6 完成后&#xff0c;请按照下面教程操作 1、下载 Xshell Plus 6 完成后&#xff0c;并解压 zip 包: 2、进入解压后的文件夹后&#xff0c;如果你之前安装了 Xshell&#xff0c; 先点击 !卸载.bat 卸载 xshell&#xff0c; 然后再点击 !绿化.bat; 如果是…

二分答案(砍树,借教室)

二分的两种情况附代码&#xff1a; 二分查找条件&#xff1a;单调&#xff0c;二段性 例题1&#xff1a;P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 上代码&#xff1a; #include<bits/stdc.h> using namespace std; const …

校招说明书

3400字的详细说明&#xff0c;介绍了程序员类岗位校招的整体时间节点和招聘流程。还对一些常见的问题进行讨论&#xff0c;例如内推、offer和三方、实习等。 第一章介绍基本的术语&#xff0c;第二章介绍整个校招的重要流程及时间点&#xff0c;然后第三章介绍每次招聘要经过的…

什么是jQuery?怎么使用?

​ 文章目录 一、jQuery是什么二、dom对象和jQuery对象1、DOM对象可以和jQuery对象相互的转换 三、基本选择器1、元素选择器&#xff1a;根据HTML元素的名称选择元素2、ID选择器&#xff1a;通过元素的ID属性选择元素3、类选择器&#xff1a;通过元素的class属性选择元素4、通…