当前位置:网站首页>【二叉树】树的子结构
【二叉树】树的子结构
2022-08-09 18:42:00 【豪冷啊】
0x00 题目
输入两棵二叉树A和B,判断B是不是A的子结构
约定空树不是任意一个树的子结构
B是A的子结构
即 A 中有出现和 B 相同的结构和节点值
0x01 思路
若树 B 是树 A 的子结构
则子结构的根节点可能为树 A 的任意一个节点
所以要遍历 A 树的每个节点
依次与 B 的每个节点进行比较
当节点 B 为空:说明树 B 已匹配完成(越过叶子节点),因此返回 true
当节点 A 为空:说明已经越过树 A 叶子节点,即匹配失败,返回 false
当节点 A 和 B 的值不同:说明匹配失败,返回 false
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
解法:
func isSubStructure(_ A: TreeNode?, _ B: TreeNode?) -> Bool {
func dfs(_ a: TreeNode?, _ b: TreeNode?) -> Bool {
if b == nil { return true } // B 到头了
if a == nil { return false } // A 到头了
if a!.val != b!.val { return false } // 值不相等
return dfs(a?.left, b?.left) && dfs(a?.right, b?.right)
}
guard let _ = A else { return false }
guard let _ = B else { return false }
let b1 = dfs(A, B)
let b2 = isSubStructure(A?.left, B)
let b3 = isSubStructure(A?.right, B)
return b1 || b2 || b3
}
0x03 我的小作品
欢迎体验我的作品之一:小五笔 86 版
五笔学习好帮手~App Store 搜索即可~
边栏推荐
- [免费专栏] Android安全之静态方式逆向APK应用浅析【手动注入smali+】+【IDA Pro静态分析so文件】+【IDA Pro基础使用讲解】
- [Free column] APK dynamic reverse application of Android security [Three Smali injection methods]
- ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
- 毕昇编译器优化:Lazy Code Motion
- 对应运放 RC 滤波负反馈的波形
- IDEA tools commonly used configuration
- pat链表专题训练+搜索专题
- 有文章说明或者证明MYSQL 嵌套子查询不足之处吗?
- 漏洞复现-redis未授权getshell
- From functional testing to automated testing, do you know their shortcomings?
猜你喜欢

你应该试着独自做个游戏

国产抗新冠口服药每瓶不超300元/ 我国IPv6网络全面建成/ 谷歌入局折叠屏手机...今日更多新鲜事在此...

uniapp离线推送华为厂商申请流程
![[Free column] Xposed plug-in development for Android security [from scratch] tutorial](/img/7b/a036ac664c7e27ed7d87e7ee18c05d.png)
[Free column] Xposed plug-in development for Android security [from scratch] tutorial

新出现的去中心化科学能够为科学领域带来什么?

【Unity3D】2D动画

Fully automated machine learning modeling!The effect hangs the primary alchemist!
![[免费专栏] Android安全之Android Fragment注入](/img/bf/244e7095ce010bfea799d02395b419.png)
[免费专栏] Android安全之Android Fragment注入

Codesys结构变量编程应用(STRUCT类型)

How to stop the test after reaching a given number of errors during stress testing in JMeter
随机推荐
21天学习挑战赛--第四天打卡(横竖屏切换)
三星旗舰优惠千八,苹果优惠过千,国产旗舰只降五百打发叫花子
[Free column] APK dynamic reverse application of Android security [Three Smali injection methods]
《痞子衡嵌入式半月刊》 第 60 期
韩国严厉监管元宇宙相关企业
AttributeError: module 'click' has no attribute 'get_os_args'
电商项目架构图
单调栈
shell之变量详解,让你秒懂!
poj 1182 食物链(带权并查集)
开源一夏 | 基于若依架构的列表详情展示
How to suppress alarm storms?
2022.08.05_每日一题
MQTT X Web:在线的 MQTT 5.0 客户端工具
听音识情绪 | 程序员手把手教你搭建神经网络,更快get女朋友情绪,求生欲max!
ebook download | "Business executives' IT strategy guide - why enterprises should implement DevOps"
技术分享 | 接口自动化测试如何处理 Header cookie
为什么数字钱包需要引入小程序生态
【Unity3D】2D动画
基于CC2530 E18-MS1-PCB Zigbee DIY作品(三)