当前位置:网站首页>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.总结
- 按照题目要求需要对树进行查找和比较两个过程
- 每查找到一次相同值节点就需要进行一次比较
边栏推荐
- 嵌入式常用计算神器EXCEL,欢迎各位推荐技巧,以保持文档持续更新,为其他人提供便利
- Classic sql50 questions
- 每日一题:力扣:225:用队列实现栈
- A Mexican airliner bound for the United States was struck by lightning after taking off and then returned safely
- 【sdx62】WCN685X将bdwlan.bin和bdwlan.txt相互转化操作方法
- GPS从入门到放弃(十二)、 多普勒定速
- 插入排序与希尔排序
- [Digital IC hand tearing code] Verilog burr free clock switching circuit | topic | principle | design | simulation
- Kohana 数据库
- 3DMax指定面贴图
猜你喜欢
基於 QEMUv8 搭建 OP-TEE 開發環境
Classic sql50 questions
GPS从入门到放弃(十五)、DCB差分码偏差
3DMax指定面贴图
CCNA-思科网络 EIGRP协议
ZABBIX proxy server and ZABBIX SNMP monitoring
Management background --4, delete classification
Crawler obtains real estate data
【数字IC手撕代码】Verilog无毛刺时钟切换电路|题目|原理|设计|仿真
C # réalise la liaison des données du rapport Crystal et l'impression du Code à barres 4
随机推荐
Attack and defense world miscall
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
Four data streams of grpc
Research and investment strategy report of China's VOCs catalyst industry (2022 Edition)
3DMax指定面贴图
Data storage (1)
[sciter]: encapsulate the notification bar component based on sciter
基于 QEMUv8 搭建 OP-TEE 开发环境
Oracle control file and log file management
【数字IC手撕代码】Verilog无毛刺时钟切换电路|题目|原理|设计|仿真
小常识:保险中的“保全”是什么?
【sciter】: 基于 sciter 封装通知栏组件
Chapter 4: talk about class loader again
第3章:类的加载过程(类的生命周期)详解
Shell product written examination related
[sdx62] wcn685x will bdwlan Bin and bdwlan Txt mutual conversion operation method
Classic sql50 questions
PVL EDI project case
嵌入式常用计算神器EXCEL,欢迎各位推荐技巧,以保持文档持续更新,为其他人提供便利
Maximum product of three numbers in question 628 of Li Kou