diff --git a/problems/二叉树的迭代遍历.md b/problems/二叉树的迭代遍历.md index a139652c..4cb94cb5 100644 --- a/problems/二叉树的迭代遍历.md +++ b/problems/二叉树的迭代遍历.md @@ -454,6 +454,79 @@ var postorderTraversal = function(root, res = []) { }; ``` +Swift: + +> 迭代法前序遍历 +```swift +func preorderTraversal(_ root: TreeNode?) -> [Int] { + var res = [Int]() + if root == nil { + return res + } + var stack = [TreeNode]() + stack.append(root!) + while !stack.isEmpty { + let node = stack.popLast()! + res.append(node.val) + if node.right != nil { + stack.append(node.right!) + } + if node.left != nil { + stack.append(node.left!) + } + } + return res +} +``` + +> 迭代法中序遍历 +```swift +func inorderTraversal(_ root: TreeNode?) -> [Int] { + var res = [Int]() + if root == nil { + return res + } + var stack = [TreeNode]() + var cur: TreeNode? = root + while cur != nil || !stack.isEmpty { + if cur != nil { + stack.append(cur!) + cur = cur!.left + } else { + cur = stack.popLast() + res.append(cur!.val) + cur = cur!.right + } + } + return res +} +``` + +> 迭代法后序遍历 +```swift +func postorderTraversal(_ root: TreeNode?) -> [Int] { + var res = [Int]() + if root == nil { + return res + } + var stack = [TreeNode]() + stack.append(root!) + // res 存储 中 -> 右 -> 左 + while !stack.isEmpty { + let node = stack.popLast()! + res.append(node.val) + if node.left != nil { + stack.append(node.left!) + } + if node.right != nil { + stack.append(node.right!) + } + } + // res 翻转 + res.reverse() + return res +} +``` -----------------------