添加257. 二叉树的所有路径 Swift 版本

This commit is contained in:
YDLIN
2022-01-21 10:45:10 +08:00
parent 451fbe16f6
commit 02fd6b8f9a

View File

@ -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
}
```
-----------------------