LeetCode——572—— 另一棵树的子树

news/2024/5/17 13:48:53

1.题目 

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。icon-default.png?t=N7T8https://leetcode.cn/problems/subtree-of-another-tree/

给你两棵二叉树 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

提示:

root 树上的节点数量范围是 [1, 2000]
subRoot 树上的节点数量范围是 [1, 1000]
-104 <= root.val <= 104
-104 <= subRoot.val <= 104

2.解析 

 

首先我们可以知道root为空时肯定不存在即返回false;

第二点我们可以套用LeetCode——100——相同的树的思路bool isSameTree判断是否相同;

我们可以考虑递归找root->val==subRoot->val时进行比较此时root和subRoot是否相同,

我们不能直接写

if(root->val==subRoot->val)return (isSameTree(root,subRoot));

但此时我们需要考虑以下这种情况

因此我们要改为限制条件 ,实现不断对比,查找是否存在 root 中是否包含和 subRoot 具有相同结构和节点值的子树;

if(root->val==subRoot->val)
{if(isSameTree(root,subRoot)){return true;}}

root左右子树递归查看 

 3.代码实现

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{if(p==NULL&&q==NULL){return true;}if(p==NULL||q==NULL){return false;}if(p->val!=q->val){return false;}return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
if(root==NULL)
{return false;
}
if(root->val==subRoot->val)
{if(isSameTree(root,subRoot)){return true;}}return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

将代码

if(root->val==subRoot->val)
{if(isSameTree(root,subRoot)){return true;}}return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

可升华为

return isSameTree(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);

最终代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{if(p==NULL&&q==NULL){return true;}if(p==NULL||q==NULL){return false;}if(p->val!=q->val){return false;}return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
if(root==NULL)
{return false;
}return isSameTree(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}


http://www.mrgr.cn/p/77657483

相关文章

08-接口文档和JWT

接口文档 楔子 接口文档对于协调前后端开发非常重要,可以避免因为开发习惯不同而导致的意外情况。在项目中,如果前后端开发各自为战,可能会出现不一致的情况。因此,接口文档可以约束双方,确保他们按照统一的规范进行开发,从而提高协同开发的效率和一致性。 规范 接口文档…

“趣”学架构

搭系统先搭架子 对于多个业务需求,都有打印入参、检验入参、业务逻辑、打印出参、处理异常的流程。 方法1:做业务逻辑的聚类 但内容经常不同,很难去做大范围的聚类 方法2:模版方法模式 用抽象类做约束,必须实现这些接口伪代码 弊端业务需求会导致代码经常多一个功能,改一…

Spring 源码阅读(一)环境搭建

注意事项:使用 2024-03-14 发布的 Spring 5.3.33 版本 IDE 工具使用了 Intellij IDEA,同时为了简化不必要的内容没单独配置 Gradle 环境 JDK 版本采用 Eclipse Temurin 1.8/11 均可下载源码 下载 SpringFramework 源码,本次选择 5.3.33 版本,发布日期 2024-03-14,通过 Int…

4.18作业

顺序栈&#xff1a; #include "seq_stack.h" seq_p creat_stack() //从堆区申请顺序栈的空间 {seq_p S(seq_p)malloc(sizeof(seq_stack));if(SNULL){printf("空间申请失败\n");return NULL;}bzero(S->data,sizeof(S->data));S->top-1;return S; …

性能测试——性能测试-常见linux性能指标监控命令

vmstat命令: top命令: free -h命令: df -h命令: mpstat命令: sar – 收集和报告系统活动

Apache Zeppelin 命令执行漏洞复现(CVE-2024-31861)

0x01 产品简介 Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的开源框架&#xff0c;Zeppelin提供了数据分析、数据可视化等功能&#xff0c; 0x02 漏洞概述 Apache Zeppelin 中代码生成控制不当&#xff08;“代码注入”&#xff09;漏洞。攻击者可以使用 She…

这个网络爬虫代码,拿到数据之后如何存到csv文件中去?

大家好,我是皮皮。 一、前言 还是昨天的那个网络爬虫问题,大佬们,帮忙看看这个网络爬虫代码怎么修改?那个粉丝说自己不熟悉pandas,用pandas做的爬虫,虽然简洁,但是自己不习惯,想要在他自己的代码基础上进行修改,获取数据的代码已经写好了,就差存储到csv中去了。 他的…

免费的 ChatGPT、GPTs、AI绘画(国内版)

&#x1f525;博客主页&#xff1a;白云如幻❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ ChatGPT3.5、GPT4.0、GPTs、AI绘画相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚…

spring boot 集成rocketMq + 基本使用

1. RocketMq基本概念 1. NameServer 每个NameServer结点之间是相互独立&#xff0c;彼此没有任何信息交互 启动NameServer。NameServer启动后监听端口&#xff0c;等待Broker、Producer、Consumer连接&#xff0c; 相当于一个路由控制中心。主要是用来保存topic路由信息&#…

使用Java调用音乐开放API,并进行播放

使用Java调用音乐开放API&#xff0c;并进行播放 背景描述 电脑没有下载音乐软件&#xff0c;使用网页播放又不太方便&#xff0c;所有就想着使用Java语言直接调用音乐开放API&#xff0c;然后进行播放音乐。 具体代码如下&#xff0c;包含了注释 package com.lowkey.comple…

林草资源管理系统:构筑绿色长城,守护自然之美

在全球气候变化和生态环境恶化的背景下,森林和草原资源的保护、恢复和合理利用显得尤为重要。林草资源管理系统的建立,旨在通过现代信息技术手段,提升林草资源管理的效率和质量,确保自然资源的可持续发展。 项目背景 森林和草原是地球上重要的生态系统,它们不仅为人类提供…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之十二 简单把视频的水印去掉效果 一、简单介绍 二、简单把视频的水印去掉效果实现原理 …

线程池学习(通俗易懂)

线程池 线程池是什么ThreadPoolExecutor模拟实现线程池结语 线程池是什么 假设我们要频繁的创建线程和销毁线程,但是创建线程和销毁线程是有成本的. 所以我们可以提前创建一批线程,后面需要使用的时候,直接拿就可以了,这就是线程池. 当线程不再使用的时候,就归还到池子里.为什…

第五节 极限运算法则

第五节 极限运算法则本节讨论极限的求法,主要是建立极限的四则运算法则和复合函数的极限运算法则,利用这些法则,可以求某些函数的极限 定理1: 两个无穷小的和是无穷小。用数学归纳法可证:有限个无穷小之和也是无穷小定理2: 有界函数与无穷小的乘积是无穷小.推论1: 常数与无…

TC397如何超频

https://mp.weixin.qq.com/s/lhl21VpOW20rxsfhnZPuzw TC397手册中标称的最高主频是300M: 这个频率还能提升吗?答案是肯定的。本文基于TC397自带代码,介绍如何提升主频,超过300M。 -----------------------------------------------------------------------------这是一篇付…

AMD AI PC配置Ryzen AI开发环境

非常感谢“amd pervasive ai 开发者挑战赛”提供的这次机会&#xff0c;能够让我有机会接触到AMD的AI PC&#xff0c;并使用它进行相关AI功能的开发。下面首先先介绍在AI PC上配置相关开发环境。 UM790 pro开箱 这次比赛中AMD提供的是UM790 pro微型主机。其搭载了AMD Ryzen™…

面试突击---MySQL索引

面试突击---MYSQL索引 面试表达技巧&#xff1a;1、谈一下你对于mysql索引的理解&#xff1f;&#xff08;为什么mysql要选择B树来存储索引&#xff09;2、索引有哪些分类&#xff1f;3、聚簇索引与非聚簇索引4、回表、索引覆盖、最左匹配原则、索引下推&#xff08;1&#xff…

30 天精通 RxJS (25):Subject 总结

Subject其实在RxJS中最常被误解的一部份,因为Subject可以让你用命令式的方式虽送值到一个observable的串流中。本系列仅作为学习记录所用,摘录自30 天精通 Rxjs!强烈推荐!膜拜大佬!

【模板】容斥原理

集合形式 设 \(S\) 是一个有限集,\(A_1,A_2,\dots,A_n\) 是 \(S\) 的 \(n\) 个子集,则: \(|S-\cup_{i=1}^{n}A_i|=\sum\limits_{i=0}^{n}(-1)^i\sum\limits_{1\le j_1\le j_2\le\dots\le j_i}|S\cap(\cap_{k=1}^iA_{j_k})|\) 符号形式 设 \(S\) 是一个有限集,\(a_1,a_2\dot…

[2024最新]MySQL-mysql 8.0.11安装教程

网上的教程有很多&#xff0c;基本上大同小异。但是安装软件有时就可能因为一个细节安装失败。我也是综合了很多个教程才安装好的&#xff0c;所以本教程可能也不是普遍适合的。 安装环境&#xff1a;win 10 1、下载zip安装包&#xff1a; MySQL8.0 For Windows zip包下载地…