LeetCode.572.另一棵树的子树

news2025/1/16 1:41:59

题目描述:
 

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

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

输入输出实例:

思路:这道题目不绕,我们只需要使用深度优先搜索,遍历root树,然后找subroot是否与root本身、或与其左子树或者是右子树上的一部分相同,我们使用递归方法。构建一个函数isSubtree2,将root和subroot两个树作为参数,如果root为空我们返回False,如果root与subroot树相同我们就返回True,这两种情况讨论完我们就递归root的左子树或者是右子树看它是否与subroot树相同。所以我们还需要一个用来判断两个树是否相同的函数isSameTree,参数也是两个数,如果两个树都为空我们返回True,然后看是否有一个为空树,如果是我们返回False,讨论完这两种情况,我们需要return (s.val == t.val) and isSameTree(s.left,t.left) and isSameTree(s.right,t.right),即如果当前s节点值与t节点值相同,s左孩子与t左孩子值相同并且s右孩子与t右孩子相同,我们就返回True。根据上述思路,有以下代码:

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
def isSameTree(s,t):
    #都是空树,直接返回True
    if not s and not t:
        return True
    #如果其中一个是空,返回False
    if not s or not t:
        return False
    #该节点和左子树右子树都相同返回True
    return (s.val == t.val) and isSameTree(s.left,t.left) and isSameTree(s.right,t.right)

def isSubtree2(r,su):
    if not r:
            return False
    if isSameTree(r,su):
            return True
    return isSubtree2(r.left,su) or isSubtree2(r.right,su)

class Solution:
    def isSubtree(self, root: Optional[TreeNode], subRoot: Optional[TreeNode]) -> bool:
        #思路:遍历root树,找root本身或者子树中是否有与subRoot相同的
        return isSubtree2(root,subRoot)

 

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

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

相关文章

E24.【C语言】练习:求一个整数存储在内存中的二进制中1的个数(两种方法)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int n 0;int sum 0;scanf("%d", &n);while (n!0){if (n % 2 1)sum;n n / 2;}printf("%d", sum); } 代码可以更简洁 while (n!0)直接写成while (n) 对于正整数&#xff1…

探索Python文档自动化的奥秘:MkDocs的神奇之旅

文章目录 **探索Python文档自动化的奥秘&#xff1a;MkDocs的神奇之旅**第一部分&#xff1a;背景为什么选择MkDocs&#xff1f; 第二部分&#xff1a;MkDocs是什么&#xff1f;MkDocs&#xff1a;文档生成的瑞士军刀 第三部分&#xff1a;如何安装MkDocs&#xff1f;一键安装&…

C++中的宏

文章目录 第一个简单宏示例宏定义可包括分号宏定义符号正常使用案例Debug版本和release版本的宏定义使用定义宏开关为某个数值而不仅仅是定义【注意】预处理定义规范代码折叠反斜杠实现多行宏的书写 第一个简单宏示例 发生在编译的预处理阶段。 不建议下面这么写&#xff0c;下…

3.9.转置卷积

转置卷积 ​ 目前为止&#xff0c;在卷积神经网络层中&#xff0c;通常会减少下采样输入图像的空间维度&#xff08;高和宽)。然而如果输入和输出图像的空间维度相同&#xff0c;在以像素级分类的语义分割中将会很方便&#xff1a;输出像素所处的通道维可以保有输入像素在同一…

Linux应用编程——实现SPI通信(基于百问网6ULL开发板)

1.SPI简介 SPI 通常指串行外设接口&#xff08;Serial Peripheral Interface&#xff09;&#xff0c;它是一种高速、全双工、同步的通信总线。 SPI 总线在芯片的管脚上只占用四根线&#xff0c;节约了芯片的管脚&#xff0c;也为 PCB 的布局节省了空间。这四根线分别是&…

大模型学习笔记 - InstructGPT中的微调与对齐

LLM 微调 之 InstructGPT中的微调与对齐 LLM 微调 之 InstructGPT中的微调与对齐 技术概览 InstructGPT中的微调与对齐 大体步骤标注数据量模型训练 1. SFT 是如何训练的2. Reward Model是如何训练的3. RLHF 是如何训练的具体讲解RLHF 的loss 函数 模型效果参考链接&#xf…

数据结构实验报告-图

桂 林 理 工 大 学 实 验 报 告 一、实验名称&#xff1a; 实验7 图 二、实验内容&#xff1a; 1.已知一个有向图的顶点集V和边集E分别为:V (0,1,2,3,4,5,6,7,8};E{<0,2>&#xff0c;<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>.&l…

计算机的错误计算(五十二)

摘要 用错数解释计算机的错误计算&#xff08;五十一&#xff09;中案例 的错误计算原因。 首先&#xff0c;由计算机的错误计算&#xff08;二十七&#xff09;知&#xff0c;错数公式是 上式表示&#xff0c;函数值的错误数字个数 比自变量的错误数字个数 多约 位。其中…

为智能改造赋能,提升运营效率的智慧地产开源了。

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…

稳稳的年化10%,多任务时序动量策略——基于pytorch的深度学习策略(附python代码)

原创文章第608篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 做因子挖掘这段时间&#xff0c;有一个观感。 传统的因子挖掘&#xff0c;尤其是手工构造因子&#xff0c;到遗传算法因子挖掘。——本身也是一种”拟合“&#xff0c;或者说试图”…

6 定时器

6 定时器 1、基本概念2、使用库函数实现 1、基本概念 定时器的基本工作框架 STM32F103共支持8个定时器 假如分频器PSC的值0,则PSC分频系数1,表示输入1个时钟信号,CNT计数器加1,1S加1&#xff0c;当CNT计数器的值3&#xff0c;跟ARR自动重载寄存器的值21相等时&#xff0c;就…

Linux基于设备树的字符设备驱动框架

掌握设备树是 Linux 驱动开发人员必备的技能&#xff01;因为在新版本的 Linux 中&#xff0c;ARM 相关的驱动全部采用了设备树(也有支持老式驱动的&#xff0c;比较少)&#xff0c;最新出的 CPU 其驱动开发也基本都是基于设备树的&#xff0c;比如 ST 新出的 STM32MP157、NXP的…

【React】详解 index.js 文件

文章目录 一、index.js文件的基本结构1. 引入必要的模块2. 渲染根组件3. 注册服务工作者&#xff08;可选&#xff09; 二、index.js文件的详细解析1. ReactDOM.render的作用2. 为什么使用React.StrictMode3. 服务工作者的注册 三、index.js文件的最佳实践1. 使用模块化引入2. …

缓存常见问题总结

目录 一&#xff1a;缓存穿透 解决方案 1.对请求增加校验机制 2.缓存空值或者特殊值 3.使用布隆过滤器 布隆过滤器原理图​编辑 哈希函数的基本特性 布隆过滤器为什么会存在误判 如何降低误判率 如何使用布隆过滤器 布隆过滤器的应用场景 如何使用布隆过滤器 第一…

QT 建立tcp服务端 TcpServer TcpSocket

基于正点原子教程&#xff0c;个人改编一点点(先写着&#xff0c;还没学客户端来验证) QTcpServer 服务端&#xff0c;下控制多个socket QTcpSocket 可以理解为一个TCP连接 使用客户端的流程为 1.包含network和include 2.声明QTcpServer信号 整个流程都要使用QTcpServer对象&a…

搭建pxe网络安装环境实现服务器自动部署

1.首先配置自动化脚本工具 根据自己的主机设置自己的IP 这张图选择红框下面的选则剩余空间 红帽7的初始网卡为ens33&#xff0c;所以部署后新机器的网卡为ens33 根据自己所要部署的版本编写合适的脚本 使用vim.ks.cfg进入脚本编写 2.配置DHCP 使用vim编写/etc/dhcp/dhcpd.conf …

深入研究Java的String常量池

文章目录 一、StringTable分析一段代码示例一示例二示例三 二、 intern1、StringTable位置2、StringTable 性能调优3、intern深入分析3.1 思考3.2 JDK6中的解释3.3 JDK7中的解释3.4 详细分析3.5 intern正确使用的例子3.6 intern使用不当的例子 一、StringTable 常量池中的字符…

清华计算几何-ElementUniqueness, MinMap, MaxGap

ElementUniqueness问题(EU) 给出一组数给出一组数据,, 判断每个数都是唯一性的或者说判断是否存在重复的. 算法思路很简单, 快速排序 遍历判断: Max(O(nlogn) O(n)) O(nlogn)算法复杂度 代码实现 bool IsEelementUniqueness(const vector<float>& Elemnts) {vect…

【数学建模】 机器学习与统计模型

文章目录 机器学习与统计模型1. 统计分布与假设检验1.1 统计量与常见统计分布常见统计分布Python代码示例 1.2 正态性检验Shapiro-Wilk检验Python代码示例 1.3 独立性检验卡方检验Python代码示例 1.4 两组样本的差异性检验独立样本t检验Python代码示例 1.5 方差分析与事后多重比…

基于Django+MySQL球馆场地预约系统的设计与实现(源码+论文+部署讲解等)

博主介绍&#xff1a;✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术栈介绍&#xff1a;我是程序员阿龙&#xff…