当前位置:网站首页>【二叉树】树的子结构
【二叉树】树的子结构
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
搜索即可~
边栏推荐
- 面试官:MySQL 中 update 更新,数据与原数据相同时会执行吗?大部分人答不上来!
- 英赛克工控安全项目入围《钢铁行业智能制造解决方案推荐目录》
- 重磅!上海985教授当选!全球仅4人!
- 鹅厂机器狗花式穿越10m梅花桩:前空翻、单桩跳、起身作揖...全程不打一个趔趄...
- 『百日百题 · 基础篇』备战面试,坚持刷题 第五话——循环语句(2)!
- 切绳子【洛谷P1577】【二分】
- Flume (五) --------- 自定义 Interceptor、自定义 Source 与 自定义 Sink
- 基于CC2530 E18-MS1-PCB Zigbee DIY作品(三)
- Why is the data of maxcompute garbled when imported into mysql?The table of mysql is the encoding of udf8mb4
- 渗透测试-对新型内存马webshell的研究
猜你喜欢
ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
Fully automated machine learning modeling!The effect hangs the primary alchemist!
最新BEV感知基线 | 你确定需要激光雷达?(卡内基梅隆大学)
启动 CM agent 报错——ImportError: libssl.so.10: cannot open shared object file: No such file or directory
WPF 实现带蒙版的 MessageBox 消息提示框
[免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
新出现的去中心化科学能够为科学领域带来什么?
华为云全流程护航《流浪方舟》破竹首发,打造口碑爆款
[免费专栏] Android安全之动态代码注入技术(利用JDB调试APK)
[免费专栏] Android安全之静态方式逆向APK应用浅析【手动注入smali+】+【IDA Pro静态分析so文件】+【IDA Pro基础使用讲解】
随机推荐
ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
[免费专栏] Android安全之ZIP文件目录遍历漏洞
[免费专栏] Android安全之安卓APK浅析
mysql duplicate data group multiple latest records
队列题目:用队列实现栈
Office 365 Group概述以及创建方法
[免费专栏] Android安全之Android应用的汉化功能(修改so中的字符串内容)
工大科雅深交所上市:市值45亿 齐承英家族是大股东
数学建模——模拟退火
基于CC2530 E18-MS1-PCB Zigbee DIY作品(三)
一图详解沃土云创计划高校教师参与全流程
AWS CodePipeLine 跨账号部署ECS
时序攻击
鲜花线上销售管理系统的设计与实现
如何抑制告警风暴?
[免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
最新BEV感知基线 | 你确定需要激光雷达?(卡内基梅隆大学)
你应该试着独自做个游戏
vim编辑器使用
[Free column] APK dynamic reverse application of Android security [Three Smali injection methods]