From 02fd6b8f9a9dc49af1612762c80a439e0a1f5e04 Mon Sep 17 00:00:00 2001 From: YDLIN <1924723909@qq.com> Date: Fri, 21 Jan 2022 10:45:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0257.=20=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=A0=91=E7=9A=84=E6=89=80=E6=9C=89=E8=B7=AF=E5=BE=84=20Swift?= =?UTF-8?q?=20=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0257.二叉树的所有路径.md | 91 +++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/problems/0257.二叉树的所有路径.md b/problems/0257.二叉树的所有路径.md index cb837d87..9ccd81d8 100644 --- a/problems/0257.二叉树的所有路径.md +++ b/problems/0257.二叉树的所有路径.md @@ -581,6 +581,97 @@ var binaryTreePaths = function(root) { }; ``` +Swift: + +递归法: + +```swift +func binaryTreePaths(_ root: TreeNode?) -> [String] { + var result = Array() + var path = Array() + guard let root = root else { + return result + } + traversal(root, &path, &result) + return result + } + + func traversal(_ cur: TreeNode, _ path: inout Array, _ result: inout Array) { + path.append(cur.val) + // 递归终止条件:到达叶子节点 + if cur.left == nil && cur.right == nil { + var pathString = "" + // 处理 path 前面的元素 + for i in 0.. [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 + } +``` + -----------------------