diff --git a/09_BinaryTreeDFS.swift b/09_BinaryTreeDFS.swift new file mode 100644 index 0000000..9404f80 --- /dev/null +++ b/09_BinaryTreeDFS.swift @@ -0,0 +1,65 @@ +class Node { + var left: Node? + var right: Node? + var value: Int + + init(value: Int) { + self.value = value + } +} + + +// Preorder → process root first. +func preOrder(_ node: Node?) { + guard let node = node else { + return + } + + print(node.value) + preOrder(node.left) + preOrder(node.right) +} + +// Inorder → process root between left and right. +func inOrder(_ node: Node?) { + guard let node = node else { + return + } + + inOrder(node.left) + print(node.value) + inOrder(node.right) +} + +// Postorder → process root last. +func postOrder(_ node: Node?) { + guard let node = node else { + return + } + postOrder(node.left) + postOrder(node.right) + print(node.value) +} + + +// MARK: Iterative + +func preOrderIterative(_ node: Node?) { + guard let tempNode = node else { return } + var stack = [Node]() + stack.append(tempNode) + + while !stack.isEmpty { + let poped = stack.removeLast() + print(poped.value) + + if let rightE = poped.right { + stack.append(rightE) + } + + if let leftE = poped.left { + stack.append(leftE) + } + } +} +