「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
Hi 👋
- Wechat: RyukieW
- 微信公众号:LabLawliet
- 📦 技术文章归档
- 🐙 Github
我的个人项目 | 扫雷Elic 无尽天梯 | 梦见账本 | 隐私访问记录 |
---|---|---|---|
类型 | 游戏 | 财务 | 工具 |
AppStore | Elic | Umemi | 隐私访问记录 |
题目
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例: 给定如下二叉树,以及目标和 target = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
提示:
节点总数 <= 10000
叶子节点 是指没有子节点的节点。
来源:力扣(LeetCode)
题解
将问题拆解为子树的问题,递归解决
func pathSum(_ root: TreeNode?, _ target: Int) -> [[Int]] {
guard let rootV = root?.val else {
return []
}
var result: [[Int]] = []
let deta = target - rootV
var temp: [TreeNode] = []
if let left = root?.left {
temp.append(left)
}
if let right = root?.right {
temp.append(right)
}
if temp.isEmpty { // 到达叶节点了
if target == rootV {
result.append([rootV])
}
}
else {
temp.forEach { tree in
pathSum(tree, deta).forEach { datas in
result.append([rootV] + datas)
}
}
}
return result
}
👋欢迎点赞收藏关注♥️