当前位置:网站首页>LeetCode 练习——剑指 Offer 26. 树的子结构
LeetCode 练习——剑指 Offer 26. 树的子结构
2022-07-06 14:31:00 【SK_Jaco】
1.题目描述
剑指 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
2.解题思路与代码
2.1 解题思路
题目要求判断 B 是否为 A 的子树,那么首先我们就需要在 A 中找到 B 的根结点,然后从根节点开始以此判断节点是否相同。因此题目就变成了两个步骤:在 A 中寻找 B 的根结点相同的节点、以该节点为根结点和 B 依次比较判断是否相同。以题目示例 2 进行图解。
首先在 A 中寻找和 B 根结点值相同的点
在 A 中找到节点以后,以该节点为根结点与 B 从根节点开始进行比较,直到 B 遍历完成

需要注意的是,题目中节点的值可能相同,因此需要对 A 每个节点进行查找,并且每查找到一个就进行一次比较。
2.2 代码
class Solution {
boolean ans = false;
public boolean isSubStructure(TreeNode A, TreeNode B) {
if (B == null) {
return false;
}
find(A, B);
return ans;
}
// 比较两个树是否相同
public boolean compare(TreeNode root, TreeNode compareNode) {
if (root == null) {
return compareNode == null;
}
if (compareNode == null) {
return true;
}
if (root.val != compareNode.val) {
return false;
}
// 比较当前节点的最左子树
boolean p1 = compare(root.left, compareNode.left);
// 比较当前节点的右子树
boolean p2 = compare(root.right, compareNode.right);
return p1 & p2;
}
public void find(TreeNode root, TreeNode compareNode) {
if (root == null) {
return;
}
if (root.val == compareNode.val) {
// 当前节点的值与进行比较的树头节点值相同时,进行比较
boolean compare = compare(root, compareNode);
ans |= compare;
}
// 查找左子树
find(root.left, compareNode);
// 查找右子树
find(root.right, compareNode);
}
}
2.3 测试结果
通过测试

3.总结
- 按照题目要求需要对树进行查找和比较两个过程
- 每查找到一次相同值节点就需要进行一次比较
边栏推荐
- Oracle性能分析3:TKPROF简介
- NetXpert XG2帮您解决“布线安装与维护”难题
- GPS from entry to abandonment (XIV), ionospheric delay
- 【10点公开课】:视频质量评价基础与实践
- 基于 QEMUv8 搭建 OP-TEE 开发环境
- Unity3d Learning Notes 6 - GPU instantiation (1)
- Management background --1 Create classification
- ResNet-RS:谷歌领衔调优ResNet,性能全面超越EfficientNet系列 | 2021 arxiv
- 中国固态氧化物燃料电池技术进展与发展前景报告(2022版)
- RESNET rs: Google takes the lead in tuning RESNET, and its performance comprehensively surpasses efficientnet series | 2021 arXiv
猜你喜欢

C#實現水晶報錶綁定數據並實現打印4-條形碼

GNN, please deepen your network layer~

GNN,请你的网络层数再深一点~

GPS from getting started to giving up (XIII), receiver autonomous integrity monitoring (RAIM)

硬件開發筆記(十): 硬件開發基本流程,制作一個USB轉RS232的模塊(九):創建CH340G/MAX232封裝庫sop-16並關聯原理圖元器件

BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用

Assembly and Interface Technology Experiment 6 - ADDA conversion experiment, AD acquisition system in interrupt mode

重磅新闻 | Softing FG-200获得中国3C防爆认证 为客户现场测试提供安全保障

GPS from entry to abandonment (XVII), tropospheric delay

Search element topic (DFS)
随机推荐
二叉(搜索)树的最近公共祖先 ●●
RESNET rs: Google takes the lead in tuning RESNET, and its performance comprehensively surpasses efficientnet series | 2021 arXiv
2022-07-04 mysql的高性能数据库引擎stonedb在centos7.9编译及运行
第3章:类的加载过程(类的生命周期)详解
labelimg的安装与使用
将MySQL的表数据纯净方式导出
2022-07-05 stonedb的子查询处理解析耗时分析
Seata聚合 AT、TCC、SAGA 、 XA事务模式打造一站式的分布式事务解决方案
C # réalise la liaison des données du rapport Crystal et l'impression du Code à barres 4
中国VOCs催化剂行业研究与投资战略报告(2022版)
【sdx62】WCN685X将bdwlan.bin和bdwlan.txt相互转化操作方法
Oracle-控制文件及日志文件的管理
2500 common Chinese characters + 130 common Chinese and English characters
Chapter 3: detailed explanation of class loading process (class life cycle)
Support multiple API versions in flask
GPS從入門到放弃(十三)、接收機自主完好性監測(RAIM)
GPS从入门到放弃(十六)、卫星时钟误差和卫星星历误差
HDU 2008 digital statistics
Hardware development notes (10): basic process of hardware development, making a USB to RS232 module (9): create ch340g/max232 package library sop-16 and associate principle primitive devices
GPS from getting started to giving up (19), precise ephemeris (SP3 format)