添加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
}
```
-----------------------