mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
添加257. 二叉树的所有路径 Swift 版本
This commit is contained in:
@ -581,6 +581,97 @@ var binaryTreePaths = function(root) {
|
||||
};
|
||||
```
|
||||
|
||||
Swift:
|
||||
|
||||
递归法:
|
||||
|
||||
```swift
|
||||
func binaryTreePaths(_ root: TreeNode?) -> [String] {
|
||||
var result = Array<String>()
|
||||
var path = Array<Int>()
|
||||
guard let root = root else {
|
||||
return result
|
||||
}
|
||||
traversal(root, &path, &result)
|
||||
return result
|
||||
}
|
||||
|
||||
func traversal(_ cur: TreeNode, _ path: inout Array<Int>, _ result: inout Array<String>) {
|
||||
path.append(cur.val)
|
||||
// 递归终止条件:到达叶子节点
|
||||
if cur.left == nil && cur.right == nil {
|
||||
var pathString = ""
|
||||
// 处理 path 前面的元素
|
||||
for i in 0..<path.count - 1 {
|
||||
let value = path[i]
|
||||
pathString += String(value)
|
||||
pathString += "->"
|
||||
}
|
||||
// 处理 path 最后一个元素
|
||||
if let lastValue = path.last {
|
||||
pathString += String(lastValue)
|
||||
}
|
||||
// 将路径存到数组中
|
||||
result.append(pathString)
|
||||
return
|
||||
}
|
||||
|
||||
// 空节点不进入递归
|
||||
if let leftNode = cur.left {
|
||||
traversal(leftNode, &path, &result)
|
||||
// 回溯
|
||||
path.removeLast()
|
||||
}
|
||||
// 空节点不进入递归
|
||||
if let rightNode = cur.right {
|
||||
traversal(rightNode, &path, &result)
|
||||
// 回溯
|
||||
path.removeLast()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
迭代法:
|
||||
|
||||
```swift
|
||||
func binaryTreePaths(_ root: TreeNode?) -> [String] {
|
||||
// 保存树的遍历节点
|
||||
var treeStack = [TreeNode]()
|
||||
// 保存遍历路径的节点
|
||||
var pathStack = [String]()
|
||||
// 保存最终路径集合
|
||||
var result = [String]()
|
||||
guard let root = root else {
|
||||
return result
|
||||
}
|
||||
treeStack.append(root)
|
||||
pathStack.append(String(root.val))
|
||||
while !treeStack.isEmpty {
|
||||
let node = treeStack.removeLast()
|
||||
let path = pathStack.removeLast()
|
||||
|
||||
// 遇到叶子节点
|
||||
if node.left == nil && node.right == nil {
|
||||
result.append(path)
|
||||
}
|
||||
|
||||
if let rightNode = node.right {
|
||||
treeStack.append(rightNode)
|
||||
let tmp = path + "->" + String(rightNode.val)
|
||||
pathStack.append(tmp)
|
||||
}
|
||||
|
||||
if let leftNode = node.left {
|
||||
treeStack.append(leftNode)
|
||||
let tmp = path + "->" + String(leftNode.val)
|
||||
pathStack.append(tmp)
|
||||
}
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
-----------------------
|
||||
|
Reference in New Issue
Block a user