当前位置:网站首页>【二叉树】树的子结构
【二叉树】树的子结构
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
搜索即可~
边栏推荐
猜你喜欢
[] free column Android dynamic debugging GDB APP of safety
使用.NET简单实现一个Redis的高性能克隆版(四、五)
开源一夏 | 基于若依架构的列表详情展示
基于CC2530 E18-MS1-PCB Zigbee DIY作品(三)
最新BEV感知基线 | 你确定需要激光雷达?(卡内基梅隆大学)
[] free column Android run Android, her - as command of safety
[免费专栏] Android安全之APK动态方式逆向应用【三种Smali注入方法】
mysql 重复数据 分组 多条最新的记录
IDEA快捷代码实时模板
[免费专栏] Android安全之Android应用的汉化功能(修改so中的字符串内容)
随机推荐
使用.NET简单实现一个Redis的高性能克隆版(四、五)
Haven't tried line art videos this year??
基于Web的疫情隔离区订餐系统
EsgynDB Troubleshooting - ERROR[2012] Server process tdm_arkesp could not becreated
ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
Environment: Flink version: 1.15.1 jar package: flink-sql-connector-oracle
laravel报错:TokenMismatchException in VerifyCsrfToken.php line 68:
NetCore路由的Endpoint模式
日期及时间处理包 Carbon 在 Laravel 中的简单使用[通俗易懂]
pat链表专题训练+搜索专题
ebook下载 | 《 企业高管IT战略指南——企业为何要落地DevOps》
技术分享 | 接口自动化测试如何处理 Header cookie
Detailed explanation of VIT transformer
MFC教程
IS31FL3737B 通用12×12 LED驱动器 I2C 42mA 40QFN
21天学习挑战赛--第四天打卡(横竖屏切换)
mysql 重复数据 分组 多条最新的记录
WPF 实现带蒙版的 MessageBox 消息提示框
mysql duplicate data group multiple latest records
对应运放 RC 滤波负反馈的波形