剑指 Offer 26. 树的子结构

准确率、召回率、f1指标计算的区别 准确率是模型正确预测的样本占总样本的比例。 阅读详情

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)

B是A的子结构, 即 A中有出现和B相同的结构和节点值。

例如:
给定的树 A:

     3
    / \
   4   5
  / \
 1   2
给定的树 B:

   4 
  /
 1
返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。

示例 1:

输入:A = [1,2,3], B = [3,1]
输出:false
示例 2:

输入:A = [3,4,5,1,2], B = [4,1]
输出:true

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

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

算法流程:
名词规定:树 AA 的根节点记作 节点 AA ,树 BB 的根节点称为 节点 BB 。

recur(A, B) 函数:

终止条件:
当节点 BB 为空:说明树 BB 已匹配完成(越过叶子节点),因此返回 truetrue ;
当节点 AA 为空:说明已经越过树 AA 叶子节点,即匹配失败,返回 falsefalse ;
当节点 AA 和 BB 的值不同:说明匹配失败,返回 falsefalse ;
返回值:
判断 AA 和 BB 的左子节点是否相等,即 recur(A.left, B.left) ;
判断 AA 和 BB 的右子节点是否相等,即 recur(A.right, B.right) ;
isSubStructure(A, B) 函数:

特例处理: 当 树 AA 为空 或 树 BB 为空 时,直接返回 falsefalse ;
返回值: 若树 BB 是树 AA 的子结构,则必满足以下三种情况之一,因此用或 || 连接;
以 节点 AA 为根节点的子树 包含树 BB ,对应 recur(A, B);
树 BB 是 树 AA 左子树 的子结构,对应 isSubStructure(A.left, B);
树 BB 是 树 AA 右子树 的子结构,对应 isSubStructure(A.right, B);
以上 2. 3. 实质上是在对树 AA 做 先序遍历 。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
        #一是否含有子结构 ① 根节点重合 ②同样的子结构
        # 二 根节点对应,树是否一样 ①根节点的值是否相同 ②左右子树是否对应
        def f(A,B):
            if B is None:
                return True
            if A is None:
                return False
            if A.val!=B.val:  #若值不相等
                return False

            return f(A.left,B.left) and f(A.right,B.right)
        

        if A is None or B is None:  #开始两个树为空,没有子结构
            return False
        if f(A,B):  #A,B根节点重合,判断是否为一样的结构
            return True
  
        return self.isSubStructure(A.left,B) or self.isSubStructure(A.right,B)  #除根节点,子树判断


    

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

【linux】linux 出现一个网卡绑定多个ip怎么处理 我的原因是我使用了dhcp,这个会自动分配ip, 将 BOOTPROTO 参数由 dhcp 改为 static,并移除或注释掉与动态分配地址 10.0.2.15 相关的配置行(如果存在)。执行后,您可以再次使用 ip -4 a 或 ifconfig 命令确认 IP 地址已被移除。输出可以看出,您的虚拟机(k8s003)中存在一个名为 enp0s3 的网卡绑定了多个 IPv4 地址。对于某些 Linux 发行版(如 Ubuntu、Debian),您可能需要编辑网络接口的配置文件来移除多余的 IP 地址。 阅读详情

相关推荐

centos7部署mysql8.0.35,主从复制,主主集群

centos7 linux部署mysql,主从复制,主主模式

zaixiaqin的博客 1990

【LeetCode】最大 BST 子树(使用二叉树递归求解)

LeetCode 333:给定一个二叉树,找到其中最大的二叉搜索树(BST)子树,其中最大指的是子树节点数最多的。通过二叉树递归求解

小七的博客 602

【重磅干货】介质损耗因数(tanδ)揭秘:如何精准定位材料劣化最严重的温度?附权威研究PDF!

是评估绝缘材料性能的核心指标,能直接反映材料内部能量损耗和微观结构变化。通过分析tanδ-温度曲线的峰值点,可精准定位材料劣化最严重的温度。:极化损耗峰值的温度点(如环氧树脂的80℃)是材料性能拐点,需重点关注!:图3对比了5种材料的tanδ-温度曲线,峰值温度差异高达50℃!在电力设备、电子元器件等领域,材料的老化与温度密切相关。:[《介质损耗峰值温度在设备寿命预测中的应用》]在不同温度下测量tanδ,绘制曲线图。:[《多材料介质损耗峰值温度对比研究》]:基于tanδ峰值温度开发的。

mubiao05的博客 1350

剑指 Offer 26. 树的子结构(中等)

思路: 先序遍历+递归 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isSubStructure(TreeNod.

di_ko的博客 131

VMware Converter 6.2.0保姆级教程:从物理机到ESXi主机的完整迁移指南(含常见错误排查)

本文提供VMware Converter 6.2.0从物理机迁移至ESXi主机的完整保姆级教程。详细解析了迁移前的环境规划、核心转换过程步骤、版本差异对比,并重点针对代理安装失败、任务卡顿、虚拟机无法启动等常见错误提供了实战排查与解决方案,确保P2V迁移顺利进行。

sam99的博客 380

三极管稳压电路仿真分析

Z1的负极连接到三极管的基极,三极管发射极E是输出,形成了一个射极跟随器,也就是说,E极的电压随着B电压变化而变化,但BE之间有一个压降,一般硅管0.7V左右,假设B极是6.7V,那E极就是6.7-0.7=6V,所以就有一个公式VOUT=Vz-Vbe,可以根据VOUT来选择合适的稳压管。从稳压管的SPEC中我们可以看到,Vz@Izt这个参数,指在Izt=20mA时,稳压管的稳压值Vz=5.1V,也就是说流过稳压管的电流在20mA以上,稳压效果最佳。三极管导通之后,E点电压会升高,当升高到Vbe。

U_YAO的博客 2324

剑指 Offer(第2版)面试题 26:树的子结构

剑指 Offer(第2版)面试题 26:树的子结构

ProgramNovice的博客 856

get_seed协议

【代码】get_seed协议。

a545958498的博客 911

剑指Offer26:树的子结构java实现

剑指 Offer 26. 树的子结构 https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/ 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。...

WukongGo的博客 239

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目

本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。

weixin_42701915的博客 185

AU混响终极指南:从‘干声’到‘空间感’,用总音轨和发送技巧打造专业人声

本文详细介绍了如何在Adobe Audition(AU)中使用混响效果器,通过总音轨和发送技巧将‘干声’转化为具有专业‘空间感’的人声。从混响基础原理到总线架构设置,再到精细控制和自动化调整,全面解析了提升音频质量的实用技巧,适用于音乐制作、播客和内容创作。

weixin_30512089的博客 332

剑指Offer26.树的子结构 c++

剑指Offer26.树的子结构 写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点 1.递归和hashmap 1 递归和hashmap class Solution { public: bool isSubStructure(TreeNode* A, TreeNode* B) { bool res = false; //当TreeA和TreeB都不为零的时候,才进行比较。否则直接返回false if (A!=NULL

y152543654的博客 215

华为OD机试 - 打印机队列 - 优先队列(Python/JS/C/C++ 双机位C卷 200分)

这个问题要求模拟打印机的文件调度过程,关键在于正确处理每个打印机队列中的文件优先级和文件进入队列的顺序。优先级处理:每个文件有一个 1 到 10 的优先级,数字越大优先级越高,打印机应首先处理优先级最高的文件。在打印机 1 的队列中插入了 3 个文件,分别有不同的优先级,其中编号 3 的文件优先级最高,先被取出。因为打印的文件内容有轻重缓急之分,所以队列中的文件有1~10 不同的 优先级,其中数字越大优先级越高。在打印机 2 的队列中插入了 1 个文件,优先级为 1,因此它被首先取出。

学Java,找哪吒 1079

学习笔记 | Python版本 剑指 Offer 26. 树的子结构

剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:A = [1,2,3], B = [3,1] 输出:false 示例 2: 输入:A = [

大虎牙的博客 392

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

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【leetcode】【medium】剑指 Offer 26. 树的子结构​​​​​​​

剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:A = [1,2,3], B = [3,1] 输出:false 示例 2: 输入:...

lemonade13的博客 161

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode 剑指Offer 26 树的子结构

LeetCode 剑指Offer 26 树的子结构题目解题:深度优先搜索 题目 解题:深度优先搜索 相似题目: 题目 解题 面试题 04.10. 检查子树 面试题 04.10. 检查子树解题 剑指 Offer 26. 树的子结构 剑指 Offer 26. 树的子结构解题 本题与 面试题 04.10 的区别在于: 面试题 04.10 约定空树是任意一个树的子树,而本题不是; 面试题 04.10 规定 B 必须和 A 的某棵子树 完全相同 时返回 true;而本题是包含关系,A 中某

346

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

leetcode 剑指 Offer 26. 树的子结构

剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值。 例如: 给定的树 A: 3 / \ 4 5 / \ 1 2 给定的树 B: 4 / 1 返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。 示例 1: 输入:A = [1,2,3], B = [3,1] 输出:false 示例 2: 输入:A = [3,4

Qin_酱的博客 225

【剑指Offer】个人学习笔记_26_树的子结构

目录题目:[剑指 Offer 26. 树的子结构](https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/)题目分析初始解答:学习他人:方法一:方法二:方法三:方法四:方法五总结 刷题日期: 19:4005 星期四2021年4月1日 个人刷题记录,代码收集,来源皆为leetcode 经过多方讨论和请教,现在打算往Java方向发力 主要答题语言为Java 题目: 剑指 Offer 26. 树的子结构 难度中等243 输入两棵二叉树A和B,判断B是不

苏柒的博客 361

《剑指offer》【剑指Offer 26.树的子结构】

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶 C项目 Leetcode刷题 初阶数据结构与算法 C++初阶和进阶 《深入理解计算机操作系统》 《高质量C/C++编程》 ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注+点赞+收藏】,大家一起进步! 文章目录💎一、题目🏆1.题目描述🏆2.原题链接💎二、解题报告🏆1.思路分析🏆2.代码详解 💎一、题目 🏆1.题目描述 🏆2.原题链接 剑指Offer 26.树的子结构 💎二、解题报告 🏆1.思路分析 🔑思路: ​.

YQ20210216的博客 292
上一篇: 剑指 Offer 25. 合并两个排序的链表
下一篇: 剑指 Offer 28. 对称的二叉树
one_zero_one
博客等级 码龄7年 30粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值