当前位置: 首页 > news >正文

L17.【LeetCode笔记】另一棵树的子树

目录

1.题目

代码模板

2.分析

3.代码

4.提交结果


1.题目

https://leetcode.cn/problems/subtree-of-another-tree/description/

给你两棵二叉树 rootsubRoot 。检验 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]
  • -10^4 <= root.val <= 10^4
  • -10^4 <= subRoot.val <= 10^4

代码模板

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot) 
{
}

2.分析

题目的意思是在整棵二叉树中寻找特定的子树(局部相等)

检查是否包含subroot,即寻找相同的子树,因此可以直接调用L15.【LeetCode笔记】相同的树文章的代码,如下

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{if (p==NULL && q==NULL)return true;//若能执行到此,排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULLif ((p==NULL)+(q==NULL)==1)return false;//只剩下最后一种情况:p和q都不为NULLif (p->val!=q->val)return false;//执行到此处,说明p->val和q->val相等return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}

现在的问题转化为如何设计isSubtree函数使其能合理调用isSameTree函数


由于subRoot肯定不为空树,因此上来先判断root==NULL

    if(root==NULL)return false;

除去了这种情况,剩下root!=NULL,把每个节点视作根去寻找子树,判断子树是否相等

可以判断isSameTree(root,sunRoot)的返回值,再进一步操作

    if (isSameTree(root,subRoot))return true;

如果上方函数的返回值为false,情况有两种:1.完全找不到符合subRoot的子树 2.不是要找的子树,需要进一步查找(root->left和root->right)

注意:只要左右子树有一个符合要求就可以,因此用或(||)连接

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

递归展开图(只画isSameTree),以下面这个二叉树为例说明

注:CSDN会压缩图片画质,无损bmp图片链接(大小 9.28M)见百度网盘 请输入提取码

3.代码

bool isSameTree(struct TreeNode* p, struct TreeNode* q) 
{if (p==NULL && q==NULL)return true;//若能执行到此,排除了两个都为NULL的情况,剩下的情况:1.其中一个为NULL;2.两个都不为NULLif ((p==NULL)+(q==NULL)==1)return false;//只剩下最后一种情况:p和q都不为NULLif (p->val!=q->val)return false;//执行到此处,说明p->val和q->val相等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 (isSameTree(root,subRoot))return true;return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);}

4.提交结果

http://www.lryc.cn/news/499013.html

相关文章:

  • BGP通过route-policy路由策略调用ip-prefix网络前缀实现负载均衡与可靠性之AS-path属性
  • 每日速记10道java面试题14-MySQL篇
  • 内存图及其画法
  • Ansys Maxwell:Qi 无线充电组件
  • 【Shell 脚本实现 HTTP 请求的接收、解析、处理逻辑】
  • 【北京迅为】iTOP-4412全能版使用手册-第六十七章 USB鼠标驱动详解
  • 【青牛科技】拥有两个独立的、高增益、内部相位补偿的双运算放大器,可适用于单电源或双电源工作——D4558
  • Kafka 数据写入问题
  • 实战ansible-playbook(九)-profile配置- 确保 CUDA 和 MPI 环境变量正确设置并立即生效
  • 气膜馆:科技与环保融合的未来建筑新选择—轻空间
  • git回退到某个版本git checkout和git reset命令的区别
  • Preprocess
  • stm32 spi接口传输asm330l速率优化(及cpu和dma方式对比)
  • 数字时代的文化宝库:存储技术与精神生活
  • flex: 1 display:flex 导致的宽度失效问题
  • Hive 窗口函数与分析函数深度解析:开启大数据分析的新维度
  • 前端工程 Node 版本如何选择
  • 推荐在线Sql运行
  • 【数据结构】【线性表】特殊的线性表-字符串
  • app-1 App 逆向环境准备(mumu模拟器+magisk+LSPosed+算法助手+抓包(socksDroid+charles)+Frida环境搭建
  • 在米尔FPGA开发板上实现Tiny YOLO V4,助力AIoT应用
  • 【IT】测试用例模版(含示例)
  • react dnd——一个拖拽组件
  • 3GPP R18 LTM(L1/L2 Triggered Mobility)是什么鬼?(三) RACH-less LTM cell switch
  • Flutter解压文件并解析数据
  • 21、结构体成员分布
  • TSWIKI知识库软件
  • 深度学习安装环境笔记
  • 使用android studio写一个Android的远程通信软件(APP),有通讯的发送和接收消息界面
  • 学习Python的笔记14--迭代器和生成器