Skip to content

Instantly share code, notes, and snippets.

@SandeepAggarwal
Last active October 9, 2020 15:59
Show Gist options
  • Save SandeepAggarwal/121ed5835b4a333a4d33e19910639b4c to your computer and use it in GitHub Desktop.
Save SandeepAggarwal/121ed5835b4a333a4d33e19910639b4c to your computer and use it in GitHub Desktop.
Tree traversals - inOrder, preOrder, postOrder, levelOrder(Breadth first)
import UIKit
import PlaygroundSupport
class TreeNode {
var data: Int
var left: TreeNode?
var right: TreeNode?
init(data: Int) {
self.data = data
}
}
class Tree {
var root: TreeNode
init(root: TreeNode) {
self.root = root
}
///DFS
///left, root, right
func inorderTraversal() -> [Int] {
var result = [Int]()
if let left = root.left {
result.append(contentsOf: Tree(root: left).inorderTraversal())
}
result.append(root.data)
if let right = root.right {
result.append(contentsOf: Tree(root: right).inorderTraversal())
}
return result
}
///DFS
///root, left, right
func preOrderTraversal() -> [Int] {
var result = [Int]()
result.append(root.data)
if let left = root.left {
result.append(contentsOf: Tree(root: left).preOrderTraversal())
}
if let right = root.right {
result.append(contentsOf: Tree(root: right).preOrderTraversal())
}
return result
}
///DFS
///left, right, root
func postOrderTraversal() -> [Int] {
var result = [Int]()
if let left = root.left {
result.append(contentsOf: Tree(root: left).postOrderTraversal())
}
if let right = root.right {
result.append(contentsOf: Tree(root: right).postOrderTraversal())
}
result.append(root.data)
return result
}
/// breadth first traversal
func levelOrderTraversal() -> [Int] {
var result = [Int]()
var queue = [TreeNode?]()
queue.append(root)
while !queue.isEmpty {
guard let node = queue.removeFirst() else { continue }
result.append(node.data)
queue.append(node.left)
queue.append(node.right)
}
return result
}
}
let node1 = TreeNode(data: 1)
let node2 = TreeNode(data: 2)
let node3 = TreeNode(data: 3)
let node4 = TreeNode(data: 4)
let node5 = TreeNode(data: 5)
node1.left = node2
node1.right = node3
node2.left = node4
node2.right = node5
print("inorder: ",Tree(root: node1).inorderTraversal())
print("preOrder: ",Tree(root: node1).preOrderTraversal())
print("postOrder: ",Tree(root: node1).postOrderTraversal())
print("levelOrder: ", Tree(root: node1).levelOrderTraversal())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment