java数据结构与算法刷题-----LeetCode101:对称二叉树

2021.5.21开始的兔系刷题之路 根据LeetCode分类进行逐个击破 培养出自己的套路~ 从前辈们的学习经验中获得建议 并开始一点点地实践 争取一天可以刷一道题 慢慢地把这些专题都刷过来! 阅读详情
java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.youkuaiyun.com/grd_java/article/details/123063846

在这里插入图片描述

解题思路
  1. 我们发现,每一层的结点,如果是对称的,那么左右两边是反过来的。
  2. 观察上图示例1中,对于左右两个结点2. 左边的2的左孩子 = 右边的2的右孩子。
  3. 左边2的右孩子,对应右边2的左孩子。并且这个规律是一直存在于每一个向2这样的结点。
  4. 因此,我们可以采用双指针法,进行 左.左 == 右.右 这样的比较
代码
  1. 递归
    在这里插入图片描述
/**
 * 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 {
    /**O(n)
        递归,双指针遍历
     */
    public boolean isSymmetric(TreeNode root) {
        return isSymmetric(root.left,root.right);//左和右相不相等
    }
    public boolean isSymmetric(TreeNode left,TreeNode right) {
        if(left == null && right == null) return true;//如果都是null,返回true
        else if(left == null || right == null||left.val != right.val) return false;//如果只有一个null,返回false.如果左右不相等,返回false
        // 可以看成,a和b的左右是否相等。a的左 == b的右                      a的右==b的左
        else return isSymmetric(left.left,right.right)&& isSymmetric(left.right,right.left);
    }
}
  1. 迭代法:比起递归每个元素只遍历一遍,迭代法需要人为控制栈。所以每个元素访问两遍,整体效率慢一倍。
    在这里插入图片描述
class Solution {
    /**O(n)
        递归,双指针遍历
     */
    public boolean isSymmetric(TreeNode root) {
        return isSymmetric(root.left,root.right);//左和右相不相等
    }
    /**
        将递归变成迭代
     */
    public boolean isSymmetric(TreeNode left,TreeNode right) {
        Stack<TreeNode> stack = new Stack<>();
        stack.push(left);
        stack.push(right);
        while (!stack.isEmpty()){
            TreeNode q = stack.pop();
            TreeNode p = stack.pop();
            if(q==null && p==null) continue;//如果都是null,返回true
            else if(q==null || p==null || q.val!= p.val) return false;//如果只有一个null,返回false.如果左右不相等,返回false
            //q和p的左右是否相等。q的左 == p的右                      
            stack.push(q.left);stack.push(p.right);
            //q的右==p的左
            stack.push(q.right);stack.push(p.left);
        }
        //如果正常执行完成,匹配成功
        return true;    
    }
}

刷题一定要坚持,总结套路,不单单要把题做出来,要举一反三,也要参考别人的思路,学习别人解题的优点,找出你觉得可以优化的点。

  1. 单链表解题思路:双指针、快慢指针、反转链表、预先指针
  1. 双指针:对于单链表而言,可以方便的让我们遍历结点,并做一些额外的事
  2. 快慢指针:常用于找链表中点,找循环链表的循环点,一般快指针每次移动两个结点,慢指针每次移动一个结点。
  3. 反转链表:通常有些题,将链表反转后会更好做,一般选用三指针迭代法,递归的空间复杂度有点高
  4. 预先指针:常用于找结点,比如找倒数第3个结点,那么定义两个指针,第一个指针先移动3个结点,然后两个指针一起遍历,当第一个指针遍历完成,第二个指针指向的结点就是要找的结点
  1. 数组解题思路:双指针、三指针,下标标记
  1. 双指针:多用于减少时间复杂度,快速遍历数组
  2. 三指针:多用于二分查找,分为中间指针,左和右指针
  3. 下标标记:常用于在数组范围内找东西,而不想使用额外的空间的情况,比如找数组长度为n,元素取值范围为[1,n]的数组中没有出现的数字,遍历每个元素,然后将对应下标位置的元素变为负数或者超出[1,n]范围的正数,最后没有发生变化的元素,就是缺少的值。
  4. 差分数组:对差分数组求前缀和即可得到原数组
  1. 用差值,作为下标,节省空间找东西。比如1900年到2000年,就可以定义100大小的数组,每个数组元素下标的查找为1900。
  2. 前缀和数组,对于数组 [1,2,2,4],其差分数组为 [1,1,0,2],差分数组的第 ii个数即为原数组的第 i-1 个元素和第 i个元素的差值,也就是说我们对差分数组求前缀和即可得到原数组
  1. 前缀和:假设有一个数组arr[1,2,3,4]。然后创建一个前缀和数组sum,记录从开头到每个元素区间的和。第一个元素是0。第二个元素,保存第一个和sum[1] = sum[0]+arr[0],第二个元素,保存第二个和sum[2] = sum[1]+arr[1]
  1. 栈解题思路:倒着入栈,双栈
  1. 倒着入栈:适用于出栈时想让输出是正序的情况。比如字符串’abc’,如果倒着入栈,那么栈中元素是(c,b,a)。栈是先进后出,此时出栈,结果为abc。
  2. 双栈:适用于实现队列的先入先出效果。一个栈负责输入,另一个栈负责输出。
数据结构与算法的重要性、如何刷题与刷提网站推荐 数据结构与算法的重要性 毋庸置疑,数据结构与算法不仅有用,更应该是每个程序员必须掌握的基本功。 只要是研发岗位,不管是笔试还是面试,都会考察算法能力。 1、提升程序员的逻辑思维 举个例子,假设我们需要从众多数据中查找出符合要求的元素,多数人就只能借助数组这种简单的存储结构来实现,而通过学习数据结构我们会知道,解决此类问题既可以通过构建二叉排序树、平衡二叉树、甚至红黑树、B+/B- 树来解决,还可以借助哈希表解决。 2、 能力高低的分水岭 为什么很多 IT 公司都特别注重对数据结构的考察?读者大可 阅读详情

相关推荐

LeetCode题解(java语言实现).pdf

LeetCode题解(java语言实现).pdf

LeetCode 101. 对称二叉树【c++/java详细题解】

目录1、题目2、思路13、c++代码14、java代码15、思路26、c++代码27、java代码2 1、题目 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3]是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个[1,2,2,null,3,null,3]则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 进阶: 你可以运用递归和迭代两种方法解决这个问题吗? 2、思路1 (递归) O

林深不见鹿 的博客 1380

AD9361快速锁定实战:Profile寄存器配置与频率调谐算法解析

本文深入解析了AD9361射频收发器的快速锁定(Fast Lock)功能,重点阐述了其核心机制——Profile寄存器配置。通过剖析16字节Profile结构,详细讲解了频率调谐算法,包括LO_DIV、LO_INT、LO_FRAC等关键参数的计算,以及如何通过查表获取优化的环路滤波器参数。文章提供了完整的Python算法示例和FPGA实现要点,旨在帮助工程师实现毫秒级甚至微秒级的频率切换,满足跳频通信等高性能应用需求。

weixin_29196315的博客 229

【LeetCode】No.101. Symmetric Tree -- Java Version

【LeetCode】No.101. Symmetric Tree -- Java Version

汤姆lazy的优快云博客 561

从实验室到生产线:Qwen3-Omni后训练技术在实际业务中的落地挑战

本文探讨了Qwen3-Omni后训练技术在实际业务中的落地挑战,重点分析了多模态AI在工业应用中的关键问题与解决方案。通过金融风控、跨境电商等场景案例,揭示了通用模型与垂直需求的矛盾,并提供了知识蒸馏、语音合成优化等实战经验,助力企业实现技术到业务的转化。

weixin_29035147的博客 269

PCB印刷电路缺陷检测实战:从数据集准备到模型训练全流程解析

本文详细解析了PCB缺陷检测从数据集准备到模型训练的全流程。重点介绍了PKU-Market-PCB数据集的特点与下载方法,并提供了数据格式转换、模型选择(如YOLOv8)与训练配置的实战代码。针对PCB小目标检测的难点,文章给出了数据分析和模型优化的具体策略,帮助读者构建高效的缺陷检测系统。

weixin_29065791的博客 547

leetcode101 Java

public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } public boolean isSymmetric(TreeNode root) { if (root==null) { return true; } ...

weixin_43159910的博客 279

winedt + miktex + SumatraPDF 搭建latex环境

整个环境包含三部分: - winedt: 前端编辑器 - miktex: 后端编译器 - SumatraPDF: 预览器顺序无关紧要, 不过如果先装miktex的话, 可能会被winedt在安装的时候自动找到路径从而不需要设置.1.安装miktex首先在latex-project官网, 打开”get”后, 有四种平台: Linux, Mac OS, Windows, Online. 我写论文

Iteration makes perfection. 6477

对称二叉树

题目描述 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 别人的解题思路(递归) 递归的难点在于:找到可以递归的点 为什么很多人觉得递归一看就会,一写就废。 或者说是自己写无法写出来,关键就是你对递归理解的深不深。 对

qq_41684786的博客 240

逆向分析-SeparationPreview.aip-分色预览-结构分析(一)-x64dbg条件日志打印-命令表达式-PS脚本

从功能上分析,仅显示使用的专色这个功能,并没有触发插件接口。使用X64dbg加载illustrator进程,切换到句柄窗口,在窗口过程中,右键刷新获取界面。在x64dbg中,在UI中可以输入一些条件表达式,能够计算出对应的值,并打印在日志中。常用的,如果非暂停,输出第一个参数。参数二是utf16的指针,utf16@字符串地址,这里的字符串地址为[[ebp-108]]参数一是utf8的,utf8@字符串地址,这里的字符串地址为[ebp-28]从界面上分析,一个颜色列表,及仅显示专色的多选框组成。

插件开发 646

【100%通过率】2023华为od机试C卷【螺旋数组矩阵】C++ 实现

给出数字个数n和行数m(1 < n,m < 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成个一m行矩阵。疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。输入一行,两个整数,空格隔开,依次表示n、m。4.数字不够时,使用单个*号占位。3.填充数字时优先填充外部。1:模拟整个过程打印即可。1.每行数字的个数一样多。小明对这个矩阵有些要求。2.列的数量尽可能少。

MISAYAONE的博客 1249

leetcode【二叉树—简单】 101.对称二叉树

给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 进阶: 你可以运用递归和迭代两种方法解决这个问题吗?

每个人都是独一无二的,把握好自己的节奏,跟着自己的心走。 2734

uniapp - HBuilder提示adb: failed to install X Failure [INSTALL_ARSE_FAILED_NOT_APK:X(安装HBuilder调试基座失败)

安装HBuilderX调试基座失败,uniapp APP运行到手机adb: failed to install,Uniapp提示adb,uniapp ios 真机调试报错 uniapp安卓调试,Uniapp安装不了基座,手动安装基座,正在安装手机端HBuilder调试基座,点击运行到手机报错信息:基座无法正常安装,Uniapp-安装HBuilder调试基座失败解决方案,解决 HBuilderX 安卓基座安装失败的问题,显示adb报错,UniApp苹果真机运行调试(自定义基座,版本更新后/没有基座打开失败)如

🏆 前端领域优质创作者 8063

LeetCode Java面试刷题笔记汇总

LeetCode Java刷题笔记汇总,按照类型刷题效率更高。

终生学习践行者 2948

华为OD机试真题 新系统【进制转换后自定义排序】

华为OD机试 新系统真题【进制转换后自定义排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【进制转换后自定义排序】多语言题解。

qq_45776114的博客 598

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Java实现 LeetCode 101 对称二叉树

101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 说明: 如果你可以运用递归和迭代两种...

南 墙 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LeetCode刷题101-简单-对称二叉树

算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!

布小禅的博客 5781

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

瑞_力扣LeetCode_101. 对称二叉树

本文章为瑞_系列专栏之《刷题》的力扣LeetCode系列,主要以力扣LeetCode网的题进行解析与分享。力扣LeetCode_101. 对称二叉树

阿瑞——从事Java后端,喜欢研读源码、自研框架、分享经验 1390

递归与迭代——力扣101.对称二叉树

本文解析了力扣101题「对称二叉树」的两种解法。题目要求判断二叉树是否轴对称,关键在于比较左右子树是否互为镜像。递归法通过定义辅助函数isMirror,递归比较左右子树;迭代法则利用队列,按镜像顺序成对比较节点。两种方法的时间复杂度均为O(n),递归法空间复杂度O(h),迭代法为O(n)。递归法简洁直观,迭代法面试友好,可根据场景选择。本题考察了对二叉树遍历和镜像特性的理解。

w1311823723的博客 906

LeetCode101_101. 对称二叉树

LeetCode101_101. 对称二叉树

luoyepiaoxue2014的博客 1539

【LeetCode】第101题——对称二叉树(难度:简单)

【LeetCode】第101题——对称二叉树(难度:简单)题目描述解题思路代码详解方法一:迭代方法二:循环注意点 题目描述 给定一个二叉树,检查它是否是镜像对称的。 示例1:二叉树 [1,2,2,3,4,4,3] 是对称的。 示例2:二叉树 [1,2,2,null,3,null,3] 不是镜像对称的。 进阶: 你可以运用递归和迭代两种方法解决这个问题吗? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/symmetric-tree 著作权归领扣

Se7en_Dayz的博客 435

【Leetcode hot 100】101.对称二叉树

摘要:LeetCode 101题要求判断二叉树是否对称。核心思路是通过递归或迭代比较左右子树是否镜像。递归法定义辅助函数检查节点对的镜像条件(值相等且子节点对称),时间复杂度O(n)。迭代法使用队列存储待比较节点对,按相同逻辑处理,空间复杂度优化至O(n)。两种解法均通过示例验证,递归法简明,迭代法适合深度大的树。

专注Java和MySQL领域知识分享 989

101. 对称二叉树(二叉树算法题)

本文介绍了判断二叉树是否对称的两种方法:递归法和迭代法。递归法的核心是比较根节点的左右子树是否互为镜像,通过后序遍历依次比较外侧和内侧节点。迭代法则使用队列模拟层序遍历,成对比较对称位置的节点。两种方法的时间复杂度均为O(n),空间复杂度最坏情况下为O(n)。关键思路是比较左子树的左节点与右子树的右节点,以及左子树的右节点与右子树的左节点是否对称。

m0_68880377的博客 880

Java题解LeetCode——101.对称二叉树

LeetCode——101.对称二叉树 题目 101.对称二叉树 给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3 解析 代码 递归 //递归解法 class Solution0101_01 { publ

影龙武的博客qq_43594119 549
上一篇: java数据结构与算法刷题-----LeetCode69:x 的平方根
下一篇: java数据结构与算法刷题-----LeetCode104:二叉树的最大深度
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ydenergy_殷志鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值