【leetcode详解】另一棵树的子树 (C++递归:思路精析 过程反思)



思路详解:
总体框架:
对root树进行先序遍历,如果当前结点(记为cur)的值和subRoot的根节点值相等时,就开始判断
以cur为根节点的树 和 子树 是否结构一样?
如何判断两棵树是否结构完全相同?
分析:一提到“树”结构,很容易想到在(先/中/后序)遍历上做文章,请教了AI后笔者得知,如果两棵树先、后序遍历结果完全一样,那么便可说明结构完全相同(注意:先/后序中的一个 + 中序结果一样 不可说明!)


这样看来,只需要在先/后序遍历中加入结点值的判断就成了 ~
于是写出两个递归函数
int checkfir(TreeNode* root, TreeNode* subRoot)
{ //先序int re1;if(!root && !subRoot) return 1; else if(!root || !subRoot) return 0;if(root->val != subRoot->val) return 0;re1 = checkfir(root->left, subRoot->left);if(re1 == 0) return 0;re1 = checkfir(root->right, subRoot->right);return re1;
}
int checkbac(TreeNode* root, TreeNode* subRoot)
{ //后序//结构于上面类似,过程不必再表 ~
}
过程反思:
有必要写两个递归函数吗???
删了一个递归函数后,代码依然AC了...
这是为什么嘞,先序和后序只要有一个就好了吗???
答案是肯定的,因为,这函数并不是检验先序的 “最终结果” 是否一致,而是检验了“整个遍历过程”是否完全一致
To be specific, 函数实现的是两棵树“同步地”走了一遍先序遍历,如果每一步都没有出错,那就可以说明两颗树结构相同啦
所以最后只保留一个函数即可~
AC代码见下:
class Solution {
private:int checkbac(TreeNode* root, TreeNode* subRoot){int re1;if(!root && !subRoot) return 1; //trueelse if(!root || !subRoot) return 0;re1 = checkbac(root->left, subRoot->left);if(re1 == 0) return 0;re1 = checkbac(root->right, subRoot->right);if(re1 == 0) return 0;if(root->val != subRoot->val) return 0;return 1;}
public:bool isSubtree(TreeNode* root, TreeNode* subRoot) {int head = subRoot->val;if(!root) return false;if(root->val == head){if(checkbac(root, subRoot)) return true;}bool re = isSubtree(root->left, subRoot);if(re == true) return true;re = isSubtree(root->right, subRoot);if(re == true) return true;return false;}
};
~ 希望对你有启发 ~
相关文章:
【leetcode详解】另一棵树的子树 (C++递归:思路精析 过程反思)
思路详解: 总体框架: 对root树进行先序遍历,如果当前结点(记为cur)的值和subRoot的根节点值相等时,就开始判断 以cur为根节点的树 和 子树 是否结构一样? 如何判断两棵树是否结构完全相同? …...
物联网遇到人工智能,极快的加速物联网时代
近些年物联网已成为众多科技企业的战略目标,如智能家居等,在未来,手机、传感器等智能设备都走进了生活当中,据数据显示已经有80%以上的的智能手机配备了人工智能。人工智能也不陌生,自动驾驶、人脸识别这些应用场景都是…...
Vue3+Ts项目中经常遇到导入组件,vscode报无法找到模块xxx,xxx隐式拥有 “any“ 类型解决办法~
1、报错截图: 2、解决办法:在确保路径正确的情况下,你会在 src 目录下找到一个名为 env.d.ts 的文件(或者类似的名称)。在这个文件中,你可以声明 .vue 文件的模块类型。例如:(这告诉 TypeScript…...
郑州轻工业大学zzulioj1151~1159合集
郑州轻工业大学zzulioj1151~1159合集 郑州轻工业大学zzulioj1151~1159合集 1150数数多少个整数1151大整数加法题目描述1152: 二分搜索1153简易版最长序列题目描述1154: 校门外的树1155字符串比较 多实例题目描述1156单数变复数题目描述1157连续的n个1题目描述1158又是排序&…...
开发框架DevExpress XAF v24.2产品路线图预览——增强跨平台性
DevExpress XAF是一款强大的现代应用程序框架,允许同时开发ASP.NET和WinForms。XAF采用模块化设计,开发人员可以选择内建模块,也可以自行创建,从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 DevExpress XAF是一…...
程序员短视频上瘾综合症
一、是你疯了还是面试官疯了? 最近有两个学员咨询问题,把我给整得苦笑不得。大家来看看,你有没有同样的症状。 第一个学员说去一家公司面试,第一轮面试聊得挺好的。第二轮面试自我感觉良好,但是被面试官给Diss…...
image.convert()函数转换格式及显示图像的RGB三通道图像
引 言 视觉任务处理的图片按照图像通道深度分为单通道图像和多通道图像。单通道图像有grayscale灰度图、binary二值图、PNG图,多通道图像有三通道24位真彩色RGB图,8位伪彩色图像,YCbCr图像等。本文先介绍各种格式图像的特点,随后讲…...
C语言 ——— 在控制台实现扫雷游戏(一次展开一片,递归实现)
前言 两个数组,一个用来显示在控制台上,一个用来存放雷 两个数组的实际大小为11 * 11 ,而为了方便排查雷的个数,实际使用范围是9 * 9 test.c #include"mine_sweeping.h"void game() {// 存放雷char mine[ROWS][COL…...
el7升级Apache模块编译
1.背景 接续https://blog.csdn.net/nanhai_happy/article/details/140566070,由于升级升级Apache过程中,发现需要使用的mod_wsgi、mod_systemd和mod_cgi模块缺失,故接着解决继续编译生成。 2. 编译mod_cgi、mod_system 2.1 安装依赖 yum …...
Linux系统下的日志管理与ELK Stack实践
关于“Linux系统下的日志管理与ELK Stack实践”,这个主题涵盖了如何在Linux环境中高效地收集、解析、存储及分析日志,以及如何利用ELK Stack(Elasticsearch、Logstash、Kibana)这套工具来实现日志的集中管理和可视化。下面我会简要…...
C++入门基础知识
在之前我们学习了C语言和初阶数据结构的相关知识,现在已经有了一定的代码能力和对数据结构也有了基础的认识,接下来我们将进入到新的专题当中,这个专题就是C。在C中我们需要花费更大的精力和更长的时间去学习这门建立在C语言基础之上的计算机…...
Python爬虫技术 第28节 数据可视化
Python 爬虫设计结合数据可视化是一个非常强大的组合,可以用来分析和展示从网络获取的数据。以下是如何设计一个 Python 爬虫并结合数据可视化的详细步骤: 步骤 1: 确定数据源和目标 首先,确定你想要爬取的数据源和目标。例如,你…...
react中的装饰器
一、初见react装饰器 初初接触react,发现一些神秘符号和语法,觉得很神奇。类似这样: import React, { PureComponent, Fragment } from react; import {Form} from antd;Form.create() class UpdateForm extends PureComponent {。。。 }哇…...
Elasticsearch:用例、架构和 6 个最佳实践
1. 什么是 Elasticsearch? Elasticsearch 是一个开源分布式搜索和分析引擎,专为处理大量数据而设计。它建立在 Apache Lucene 之上,并由Elastic 支持。Elasticsearch 用于近乎实时地存储、搜索和分析结构化和非结构化数据。 Elasticsearch 的…...
tcp常用网络接口 linux环境
TCP(传输控制协议)网络通信是常见的网络应用形式,它提供了面向连接的、可靠的数据传输服务。TCP通信常用的接口主要包括以下几个方面: 常用接口 1. socket() int socket(int domain, int type, int protocol); 功能࿱…...
第10节课:JavaScript基础——网页交互的魔法
目录 JavaScript的作用JavaScript的基本语法基本语法规则变量、数据类型和运算符变量数据类型运算符 实践:使用JavaScript增强网页功能结语 JavaScript是一种高级的、解释型的编程语言,它使得网页能够从静态文档转变为具有动态交互性的应用程序。本节课将…...
springboot+vue+mybatis汽车租赁管理+PPT+论文+讲解+售后
汽车租赁系统是针对目前汽车租赁管理的实际需求,从实际工作出发,对过去的汽车租赁管理系统存在的问题进行分析,完善客户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高&…...
.NET C# 将文件夹压缩至 zip
.NET C# 将文件夹压缩至 zip 文章目录 .NET C# 将文件夹压缩至 zip1 使用 System.IO.Compression1.1 环境1.2 压缩文件夹1.2.1 简单压缩1.2.2 复杂压缩 1.3 解压缩1.3.1 简单解压缩1.3.2 复杂解压缩 2 使用 SharpZipLib2.1 环境2.2 压缩文件夹2.3 解压缩 3 压缩效果简单测试 1 …...
软考基本介绍
一,基本了解 计算机技术与软件专业技术资格(水平)考试(简称软件考试)为国家级考试。 考试设置了27个专业资格,涵盖5个专业领域, 3个级别层次(初级、中级、高级)。 中国计算机技术职业…...
【Vue】vue3 中使用 ResizeObserver 监听元素的尺寸宽度变化
要监听 div 宽度的变化,可以使用 ResizeObserver 接口。ResizeObserver 允许你观察一个或多个元素的尺寸变化,并在发生变化时执行回调函数。这种方法比使用 MutationObserver 更专注于尺寸变化,且不受元素属性变化的影响。 使用 ResizeObserv…...
AIGlasses_for_navigation 与操作系统原理结合:实现高并发推理服务
AIGlasses_for_navigation 与操作系统原理结合:实现高并发推理服务 最近在折腾一个基于AIGlasses_for_navigation的实时导航服务,想法挺酷,但一上线就遇到了大麻烦。想象一下,成千上万的用户同时请求路线规划,你的服务…...
2026年智能码牌服务商,究竟合不合法合规?
在数字支付行业蓬勃发展的今天,智能码牌服务商逐渐成为市场的焦点。随着2026年的到来,人们对于这些服务商的合法合规性愈发关注。以财联支付为例,我们来深入探讨智能码牌服务商的合法合规性问题。一、合法合规的基础:技术与资质双…...
火灾后的建筑残骸、燃烧痕迹的光学三维扫描测量逆向-激光三维扫描仪
摘要火灾后的建筑残骸形态、燃烧痕迹分布是事故原因追溯、责任认定及灾后重建的核心依据,其现场易破坏、结构不稳定特性对测量技术提出非接触、快速、高精度要求。激光三维扫描仪依托光学三维扫描测量逆向技术,实现建筑残骸结构、燃烧轨迹的数字化复刻与…...
【AutoSAR】详解PDUR模块
所谓梦想,就是让你感到痛苦的事情不再发生。一、前言在学习AUTOSAR通信栈时,我们会遇到多种PDU相关的缩写,如L-PDU、N-PDU、I-PDU等。理解这些缩写及其相互关系、以及它们与OSI七层模型的对应关系,对于掌握通信部分至关重要。接下…...
空项目文档无法生成技术内容
项目标题“mecanum2017_2”未提供有效摘要、关键词及README内容,所有输入字段均为空或无效(摘要仅为十六个日文平假名“おぼぼぼぼぼぼぼぼぼぼぼぼぼぼぼ”,无技术含义;关键词为空;README内容为空)。 根据…...
Efinity入门--运行第一个程序
1、新建工程与编码 file–create project这里只需要改好项目名字和所用的芯片即可。注意,这里top module 名字要和项目名字一样。 之后,file–new file,创建一个verilog文件。在这里面创建功能代码,注意最顶层的module要和项目名字…...
基础算法-高精度:高精度减法
P2142 高精度减法 题目链接:P2142 高精度减法 - 洛谷 高精度的题目解法和之前高精度加法的解法基本相同,所以就不再过多讲解原理了。 解法:模拟列竖式计算的过程。 ①先用字符串读入,然后拆分每一位,逆序放在数组…...
嵌入式开发编码规范与最佳实践
1. 为什么嵌入式开发需要编码规范?在嵌入式系统开发中,代码质量直接影响产品的稳定性和可靠性。与通用软件开发不同,嵌入式系统往往运行在资源受限的环境中,且通常需要长时间不间断工作。我曾参与过一个工业控制项目,由…...
C# 14 原生 AOT 编译 Dify 客户端到底难在哪?92%候选人栽在第4个内存模型问题上(AOT冷启动真相)
第一章:C# 14 原生 AOT 编译 Dify 客户端面试概览C# 14 引入的原生 AOT(Ahead-of-Time)编译能力,为构建轻量、启动极速、无运行时依赖的 Dify 客户端提供了全新路径。与传统 JIT 或托管 AOT 不同,原生 AOT 可将 C# 代码…...
3大技术突破重新定义多模态交互:AudioCLIP的跨模态语义对齐解决方案
3大技术突破重新定义多模态交互:AudioCLIP的跨模态语义对齐解决方案 【免费下载链接】AudioCLIP Source code for models described in the paper "AudioCLIP: Extending CLIP to Image, Text and Audio" (https://arxiv.org/abs/2106.13043) 项目地址:…...
