【LeetCode笔记】剑指 Offer 26-. 树的子结构 (Java、双重dfs、二刷)

文章目录

  • 题目描述
  • 思路 & 代码
      • 二刷

题目描述

  • 思路很值得看的一道题,和之前路径总和 III的双递归思路、结构很像
    在这里插入图片描述

思路 & 代码

  • isSubStructrue() 进行一个前序的遍历;通过 || 运算符,在找到时直接终止遍历
  • 具体函数功能、思路见代码注释
/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
class Solution {// 函数功能:遍历,判断 B 是否为 A 的子结构public boolean isSubStructure(TreeNode A, TreeNode B) {// 空树不是任意一个树的子结构if(A == null || B == null){return false;}// 先序:以 A 开始的子结构判断 || 左节点继续遍历 || 右节点继续遍历return recursion(A, B) || isSubStructure(A.left, B) || isSubStructure (A.right, B);}// 函数功能:判断以A开始的树,是否包含子结构B树。boolean recursion(TreeNode A, TreeNode B){// B遍历结束,说明完全覆盖了B,子结构if(B == null){return true;}// A遍历结束 or 节点值不同:不是子结构if(A == null || A.val != B.val){return false;}// 当前节点相同,继续进行左右子数的判断return recursion(A.left, B.left) && recursion(A.right, B.right);}
}

二刷

  • 二刷居然忘了思路了= =
  • 先对当前A,B进行符合判断,不行的话就再对A.left && B、A.right && B 进行判断。以此类推
  • isStructure() 是直接对当前节点进行判断
class Solution {public boolean isSubStructure(TreeNode A, TreeNode B) {if(A == null || B == null) {return false;}return isStructure(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);}public boolean isStructure(TreeNode A, TreeNode B) {if(B == null) {return true;}if(A == null || A.val != B.val) {return false;}return isStructure(A.left, B.left) && isStructure(A.right, B.right);}
}

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

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

相关文章

python使用pip安装包_12.2.1 使用pip安装Python包

12.2.1 使用pip安装Python包 大多数较新的Python版本都自带pip,因此首先可检查系统是否已经安装了pip。在Python 3中,pip有时被称为pip3。 1. 在Linux和OS X系统中检查是否安装了pip 打开一个终端窗口,并执行如下命令: $ pip --v…

【LeetCode笔记】剑指 Offer 61-. 扑克牌中的顺子 (Java、哈希表)

文章目录题目描述思路 & 代码二刷题目描述 感觉算比较有意思的简单题了,耗了不少时间优化 思路 & 代码 这次注释写得比较详细,直接看注释吧~ class Solution {public boolean isStraight(int[] nums) {// O(n) && O(n)…

5分绩点转4分_工作复盘|因为这5点,4月份目标没完成

写在前面:用文字记录生活,让成长变得有迹可循!4月份非常的繁忙,疫情慢慢消退,公司的业绩也慢慢在恢复;4月初的时候,公司定了月目标:成交100个学员(非团单)&am…

【LeetCode笔记】剑指 Offer 58 - I. 翻转单词顺序(Java、栈、双指针)

文章目录题目描述思路 & 代码二刷题目描述 用栈来做挺简单的,也可以用双指针。 思路 & 代码 既然是反向,那么从后往前,用双指针截取出字符串即可。 class Solution {// 双指针public String reverseWords(String s) {StringBuil…

【LeetCode笔记】剑指 Offer 57-. 和为s的两个数字 (Java、对撞双指针)

文章目录题目描述思路 & 代码二刷题目描述 很好的一道思路题,可以用来理解状态、双指针。注意:数组有序,否则需要用哈希表来做。 思路 & 代码 双指针:从头、尾往里走,重点在于为何不会丢失解状态 S(x, y)&…

python tkinter画笑脸_Python3 tkinter基础 Canvas create_polygon 画三角形

? python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 conda : 4.5.11 type setting : Markdown ? code """ Author : 行初心 Date : 18-9-30 Blog : www.cnblogs.com/xingchuxin GitHub : github.com/GratefulHeartCoder """ fr…

【LeetCode笔记】剑指 Offer 57- II. 和为 s 的连续正数序列(Java、滑动窗口、二刷)

文章目录题目描述思路 & 代码二刷题目描述 花了不少时间来优化 ,很好的一道用来理解滑动窗口的题~ 思路 & 代码 要点:为了 O(n) 复杂度,左右边界都只能往右走滑动窗口:存储当前连续正数序列 class Soluti…

设计一个类代表二维空间的一个圆。_平面设计基础——点、线、面

平面构成是以研究造型要素及构成规律为内容,讲点、线、面和基本形等视觉要素进行合理的排版合成在一个二维的平面上的艺术表现形式。平面构成是一种视觉形象的二维构成,主要是视觉的二维空间。平面构成他通过对造型要素的理性分析和严格的形式构成训练来…

【LeetCode笔记】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(Java、二叉树、dfs)

文章目录思路 & 代码代码 & 思路二刷思路 & 代码 应该在二叉树的最近公共祖先之前写 需要用到二叉搜索树的特性~ 代码 & 思路 分成四种情况即可,具体见代码注释时间复杂度 O(logn) /*** Definition for a binary tree node.* publ…

python类属性和实例属性_Python 类属性与实例属性,类对象与实例对象用法分析...

本文实例讲述了Python 类属性与实例属性,类对象与实例对象用法。分享给大家供大家参考,具体如下:demo.py(类属性,所有实例对象共用类属性): # 定义工具类 继承object是为了兼容python2.x class …

【LeetCode笔记】剑指 Offer 65. 不用加减乘除做加法(Java、位运算、二刷)

文章目录题目描述思路 & 代码二刷题目描述 讲道理,感觉算有点难度的题目了 ,还是需要时不时看看。 思路 & 代码 正负数情况可以不考虑(补码)核心:加法 进位和 非进位和关于位运算符的选择,le…

【LeetCode笔记】剑指 Offer 62. 圆圈中最后剩下的数字(Java、约瑟夫环、链表)

文章目录题目描述思路 & 代码链表模拟法数学方法二刷题目描述 约瑟夫环!题目可太经典了说实话还是有点难度的 思路 & 代码 链表模拟法 第一想法是用 LinkedList,但是会超时,于是选择ArrayList关键在于 index (index m - 1) %…

python怎么画参数函数图像_详解pandas.DataFrame.plot() 画图函数

首先看官网的DataFrame.plot( )函数 DataFrame.plot(xNone, yNone, kindline, axNone, subplotsFalse, sharexNone, shareyFalse, layoutNone,figsizeNone, use_indexTrue, titleNone, gridNone, legendTrue, styleNone, logxFalse, logyFalse, loglogFalse, xticksNone, ytick…

【学习笔记】第一章——操作系统的概念、功能、特征、发展分类(系统调用、并发共享虚拟异步)

文章目录一. 概念、功能与目标定义:功能1. 系统资源的管理者2. 用户和计算机硬件之间的接口3. 最接近硬件的层次二. 特征1. 并发2. 共享3. 虚拟4. 异步三. 发展分类1. 手工操作阶段2. 单道批处理系统3. 多道批处理系统4. 分时操作系统5. 实时操作系统总结一. 概念、…

【学习笔记】第一章——操作系统的运行机制、体系结构和内核(核心态、原语、大内核 微内核、特权指令)

文章目录总览一. 运行机制:1. 指令2. 处理器状态3. 程序二. 内核1. 定义2. 在层次结构中的划分三. 体系结构总览 重要知识点:特权指令 & 内核程序,只能在核心态执行 一. 运行机制: 1. 指令 指令:CPU 能识别、…

计算机视觉中的多视图几何_基于深度学习的视觉三维重建研究总结

三维重建意义三维重建作为环境感知的关键技术之一,可用于自动驾驶、虚拟现实、运动目标监测、行为分析、安防监控和重点人群监护等。现在每个人都在研究识别,但识别只是计算机视觉的一部分。真正意义上的计算机视觉要超越识别,感知三维环境。…

【学习笔记】第一章——操作系统的中断和异常

文章目录总览一. 诞生、概念和作用二. 分类三. 外中断的处理过程四. 导图总结总览 异常:内中断 一. 诞生、概念和作用 早期计算机,程序只能串行执行,资源利用率低(详可见OS 发展分类),为了解决这一问题…

【学习笔记】第一章——操作系统的系统调用(陷入指令、库函数、作用流程)

文章目录总览一. 定义与作用定义作用分类二. 系统调用和库函数的区别三. 系统调用背后的过程导图总结总览 面试常考题了,可得好好看看 XD 一. 定义与作用 定义 作用 结合下图例子理解按照我的理解,就是需要调用系统资源时,需要让 OS 来保…

【学习笔记】第二章——进程的定义、组成、组织方式、特征、状态 转换

文章目录1. 定义 & 组成2. 进程的组织3. 特征1、2、3 总结导图4. 状态5. 转换4、5 总结导图1. 定义 & 组成 一般直接把进程实体称为进程,但是严格来说进程实体强调静态,而进程强调动态。PCB(Process Control Block)是进程…

派生类构造的时候一定要调用_没钱的时候,一定要记住这三个教训

越没钱的时候,才更能认清身边的一些人和事,当你没钱的时候,一定要知道这三件事,这是现实也是事实啊。【1】没钱才发现钱有多重要人越在没钱的时候,越会发现钱是多么的重要,生活中大多数人的烦恼就是因为没有…