LeetCode算法递归类—剑指 Offer 26. 树的子结构

2023-09-19 08:59:58

目录

剑指 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,5,1,2], B = [4,1]
输出:true

限制:

0 <= 节点个数 <= 10000

题解:

看注释,很详细

代码:

/**
 * 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(TreeNode A, TreeNode B) {
        // 空树直接返回false
        // A为空树说明A(左数、右数)遍历到最后也没发现和B根节点一样的节点
        // B为空树说明B就是个空树:约定空树不是任意一个树的子结构
        if(A==null||B==null) return false;
         // B为A的子结构有3种情况,满足任意一种即可:
        // 1.B的子结构起点为A的根节点,此时结果为recur(A,B)
        // 2.B的子结构起点隐藏在A的左子树中,而不是直接为A的根节点,此时结果为isSubStructure(A.left, B),即还没对比到和A的当前节点等于B的根节点,继续向下对比
        // 3.B的子结构起点隐藏在A的右子树中,此时结果为isSubStructure(A.right, B),即还没对比到和A的当前节点等于B的根节点,继续向下对比
        // 所以先调用fun函数判断当前A,B节点是否相等,不相同则A左边往下移继续和B对比,A左子树对比完都没有,则A右边往下移继续和B对比
        return fun(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B);
    }
    // 判断当前A,B节点是否相等,递归则实现判断传进去的A,B是否为相同的树
    public boolean fun(TreeNode A, TreeNode B){
        if(B==null) return true;
        if(A==null||A.val!=B.val) return false;
        // 此处调用递归则说明,A和B已经相等,继续判断传进去的A,B是否为相同的树
        return fun(A.left,B.left)&&fun(A.right,B.right);
    }

}

运行结果:

更多推荐

精准测试(针对人工执行的测试用例和自动化测试脚本)

在软件测试中,我们常常碰到两个基本问题(困难):很难保障无漏测:我们做了大量测试,但不清楚测得怎样,对软件上线后会不会出问题,没有信心;选择待执行的测试用例:面对大量的回归测试用例时,我们没有足够的时间完成测试,如何选择出有效的测试用例呢?虽然我们会有一些策略,如基于风险的测试策略、基于操作剖面的测试策略或组合测试策略

系统架构:软件工程速成

文章目录参考概述软件工程概述软件过程可行性分析可行性分析概述数据流图数据字典需求分析需求分析概述ER图状态转换图参考软件工程速成(期末+考研复试+软考)均适用.支持4K概述软件工程概述定义:采用工程的概念、原理、技术和方法来开发与维护软件。三要素:方法:完成软件开发各项任务的技术方法,回答“怎么做”。工具:为运用方法提

美创科技入选IDC中国等保合规市场报告推荐厂商

近日,全球领先的IT研究和咨询公司IDC正式发布《IDCPersepctive:中国等保合规市场洞察,2023》报告。在该市场报告中,IDC对中国等保合规市场的发展现状进行调研,明确了最终用户等保合规建设的痛点、难点,阐述了市场中各技术服务提供商的产品服务方案和优势。美创科技凭借在数据安全和运行安全领域专业能力与积累实

垃圾收集算法

1.如何判断对象是否存活?1.1引用计数算法基本思路:在对象中添加一个引用计数器每当有一个地方引用它的时候,计数器就加+1每当有一个引用失效的时候,计数器就减-1当计数器的值为0的时候,那么该对象就是可被GC回收的垃圾对象存在的问题:对象循环引用a对象引用了b对象,b对象也引用了a对象,a、b对象却没有再被其他对象所引

单片机外设-串口(UART)详情

目录学习UART要先认识一些基础知识一:什么是串行、并行通信?(1)串行通信串行通信概念:串行通信的特点:(2)并行通信并行通信概念:并行通信特点:二:什么是异步通信、同步通信?(1)异步通信​编辑异步通信概念:异步通信特点:(2)同步通信同步通信概念:1、外同步2、自同步同步通信特点:三:什么是单工、半双工、全双工通

Vue知识系列(5)每天10个小知识点

目录系列文章目录Vue知识系列(1)每天10个小知识点Vue知识系列(2)每天10个小知识点Vue知识系列(3)每天10个小知识点Vue知识系列(4)每天10个小知识点知识点41.vue常用基本指令有哪些以及他们的作用和使用场景42.Vue组件中data为什么必须是函数43.v-if和v-show的区别44.vue自定

Git(7)——使用Beyond Compare快速解决冲突

一、简介根据前六章的学习,我们应该很清楚地感知到不同分支合并代码时产生的冲突是最让我们头疼的问题,因为他需要我们手动去解决冲突的文件,有没有一种方法可以快速地解决冲突呢?本篇文章将介绍如何使用ByondCompare去快速解决冲突二、在Git中进行配置使用如下命令对Git进行配置注:这里的--local是指以下这命令配

Nacos内核设计之一致性协议(上)

Nacos一致性协议Nacos技术架构先简单介绍下Nacos的技术架构从而对nacos有一个整体的认识如图Nacos架构分为四层用户层、应用层、核心层、各种插件再深入分析下nacos一致性协议的发展过程及原理实现为什么nacos需要一致性协议Nacos是一个需要存储数据的一个组件为了实现这个目标,就需要在Nacos内部

(2022,DALL·E2,CLIP,Diffusion,AR)使用 CLIP 潜在空间的分层文本条件图像生成

HierarchicalText-ConditionalImageGenerationwithCLIPLatents公众号:EDPJ(添加VX:CV_EDPJ或直接进Q交流群:922230617获取资料)目录0.摘要1.简介2.方法2.1解码器2.2先验3.图像处理3.1变化3.2插值3.3文本差异(TextDiffs

stm32学习笔记:OLED显示屏

一、OLED简介OLED:有机发光二极管,供电∶3~5.5V,通信协议︰I2C/SPI,分辨率∶128+64二、常用的调试方式串口调试∶通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息显示屏调试∶直接将显示屏连接到单片机,将调试信息打印在显示屏上Keil调试模式∶借助Keil软件的调试模式,可使用单步

推送服务本地通知频次及分类管控通知

尊敬的华为开发者:为了给用户提供更好的消息通知体验,营造清朗网络空间。从2023年9月15日开始,华为推送服务将基于《华为消息分类标准》对本地通知进行灰度管控,主要包括对应用发送的本地通知进行分类管理,以及对资讯营销消息统一进行频次管控。(注:本地通知指应用客户端直接调用系统接口发送的通知。)详细规则如下:应用在未申请

热文推荐