当前位置: 首页 > news >正文

剑指 Offer 26. 树的子结构

摘要

剑指 Offer 26. 树的子结构

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构),B是A的子结构, 即 A中有出现和B相同的结构和节点值。

一、子树解析

思路解析:若树B是树A的子结构,则子结构的根节点可能为树A的任意一个节点。因此,判断树 B是否是树A的子结构,需完成以下两步工作:

  • 先序遍历树A中的每个节点nA​ ;(对应函数 isSubStructure(A, B))。
  • 判断树A中以nA​为根节点的子树是否包含树B 。(对应函数 recur(A, B))

树A的根节点记作节点A ,树B的根节点称为节点B。

recur(A, B) 函数:

终止条件:

  • 当节点B为空:说明树B已匹配完成(越过叶子节点),因此返回true ;
  • 当节点A为空:说明已经越过树A叶子节点,即匹配失败,返回false ;
  • 当节点A和B的值不同:说明匹配失败,返回false ;

返回值:

  • 判断A和B的左子节点是否相等,即 recur(A.left, B.left) ;
  • 判断A和B的右子节点是否相等,即 recur(A.right, B.right) ;

isSubStructure(A, B) 函数:

特例处理: 当 树A为空 或 树B为空时,直接返回 false;

返回值: 若树B是树A的子结构,则必满足以下三种情况之一,因此用或 || 连接;

  • 以 节点A为根节点的子树 包含树B,对应 recur(A, B);
  • 树B是树A左子树的子结构,对应 isSubStructure(A.left, B);
  • 树B 是树A右子树的子结构,对应 isSubStructure(A.right, B);

package Tree;/*** @Classname JZ26树的子结构* @Description TODO* @Date 2023/2/20 22:37* @Created by xjl*/
public class JZ26树的子结构 {public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) {val = x;}}/*** @description 判断一个树是否为一个树的子树 * @param: A* @param: B* @date: 2023/2/20 22:40* @return: boolean* @author: xjl*/public boolean isSubStructure(TreeNode A, TreeNode B) {return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));}boolean recur(TreeNode A, TreeNode B) {if(B == null) {return true;}if(A == null || A.val != B.val) {return false;}return recur(A.left, B.left) && recur(A.right, B.right);}
}

复杂度分析:

  • 时间复杂度O(MN) : 其中 M,N分别为树A和 树B的节点数量;先序遍历树A占用 O(M),每次调用 recur(A, B) 判断占用O(N) 。
  • 空间复杂度O(M) : 当树A和树B都退化为链表时,递归调用深度最大。当 M≤N时,遍历树A与递归判断的总递归深度为M ;当 M>N时,最差情况为遍历至树A 叶子节点,此时总递归深度为 M。

博文参考

《leetcode》

相关文章:

剑指 Offer 26. 树的子结构

摘要 剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构),B是A的子结构, 即 A中有出现和B相同的结构和节点值。 一、子树解析 思路解析:若树B是树A的子结构,则…...

他是00年的,我们卷不过他...

现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…...

C#开发的OpenRA的OpenGL创建纹理流程

C#开发的OpenRA的OpenGL创建纹理流程 由于OpenRA采用的是OpenGL来显示游戏画面, 那么它就必然采用纹理来显示了。 并且由于它是2D的游戏,所以3D的模型是没有的,只要使用纹理贴图,就可以完全实现了游戏的功能。 OpenGL的纹理要起作用,需要经过一系列的动作。 先要使用glGen…...

3D目标检测(一)—— 基于Point-Based方法的PointNet系列

3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 目录 3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 前言 零、网络使用算法 …...

《设计模式》策略模式

策略模式 前言 先了解一下设计模式的几种类似: 行为型设计模式(Behavioral Design Pattern)是指一组设计模式,它们关注的是对象之间的通信和协作。行为型设计模式描述了对象之间的职责分配和算法的封装,以及如何在运…...

【离散数学】1. 数理逻辑

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学:研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑:研究推理的科学 数学方法:引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学,即使用符号化…...

Java8新特性学习

Java8新特性学习为啥使用Lambda表达式Lambda表达式的基础语法无参无返回有参无返回一个参数多参单个语句体类型推断四大内置核心函数式接口其他接口方法引用与构造器引用Stream简介什么是StreamStream操作步骤创建Stream中间操作终止操作(终端操作)归约与收集并行流…...

SPARK outputDeterministicLevel的作用--任务全部重试或者部分重试

背景 目前spark的repartition()方法是随机分配数据到下游,这会导致一个问题,有时候如果我们用repartition方法的时候,如果任务发生了重试,就有可能导致任务的数据不准确,那这个时候改怎么解决这个问题呢? …...

图数据库中的 OLTP 与 OLAP 融合实践

在一些图计算的场景下,我们会遇到同时需要处理 OLTP 和 OLAP 的问题。而本文就给了一个 OLTP 与 OLAP 融合实践的指导思路,希望给你带来一点启发。 Dag Controller 介绍 Dag Controller 是 NebulaGraph 企业版的图系统,经过反复测试无误后已…...

Shader Graph简介

使用着色器(shader)和材质(material),我们能够创造出非常多有趣的效果。除了Unity自带的shader外,还可以自己编写shader或使用其他人所编写的shader。编写shader通常需要我们了解shader编程语言的语法和相关…...

kubectl

目录 一、陈述式资源管理方法 二、基本信息查看 2.1 基本信息查看格式 2.2 查看master节点组件状态 2.3 查看命名空间 2.4 创建/查看命名空间 2.5 删除(重启)命名空间/pod 2.6 查看资源的详细信息 2.7 创建副本控制器来启动Pod 2.8 查看指定命…...

实验室设计SICOLAB第三方检测中心实验室设计

第三方检测中心实验室怎么设计?详细设计内容有哪些?功能区域有哪些?仪器有哪些?要多少面积?第三方检测中心实验室是一种独立的实验室,为客户提供各种测试和分析服务。以下是一个第三方检测中心实验室的详细…...

GPS经纬度转距离

function [pN, pE] distance_gps(lon1, lon2, lat1, lat2)d2r pi/180; % deg转radR 6371000.0; % 地球半径pN (lat2 - lat1) * d2r * R;pE (lon2 - lon1) * d2r * R * cos(lat2 * d2r); end...

7-周赛333总结

7-周赛333总结 还是只过了前两题,第三题又写了好久好久,然后也不知道错在了哪里,只过了部分题解,也许是思考不全面吧。下次也许先做第四题更好…第四题今天花了点时间 做出来了个大概 开心 :happy: 合并两个二维数组 - 求和法【…...

电子招标采购系统源码—互联网+招标采购

智慧寻源 多策略、多场景寻源,多种看板让寻源过程全程可监控,根据不同采购场景,采取不同寻源策略, 实现采购寻源线上化管控;同时支持公域和私域寻源。 询价比价 全程线上询比价,信息公开透明,可…...

SQL注入和XSS攻击

1、SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 我们永远不要信任用户的输入,我们必须认定用户输入的数据都是不安全的,我们都需要对用户输…...

js Map的使用

前言:Map数据集可以理解为加强版的对象 一、for...of 1、对象不能用于for of,因其没有部署Iterator接口;其他数据集如:数组、Map、Set、Iterator对象等都可以用for...of2、使用for...of的优势: for of的循环体中可以…...

企业应该怎么管理香港服务器?

做好服务器管理,往往能为站长避免很多麻烦。用户租用服务器,除了希望它快速而安全,还有就是如何才能得到优质及时的售后和指导建议了。服务器供应商只提供服务器管理的基础服务,负责提供硬件、带宽和电力等服务,服务器…...

软件设计(十四)-UML建模(上)

软件设计(十三)-原码、反码、补码、移码https://blog.csdn.net/ke1ying/article/details/129115844?spm1001.2014.3001.5501 UML建模包含:用例图,类图与对象图,顺序图,活动图,状态图&#xff…...

本地主机搭建服务器后如何让外网访问?快解析内网端口映射

本地主机搭建应用、部署服务器后,在局域网内是可以直接通过计算机内网IP网络地址进行连接访问的,但在外网电脑和设备如何访问呢?由于内网环境下,无法提供公网IP使用,外网访问内网就需要一个内外网转换的介质。这里介绍…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...