Created
October 9, 2020 15:56
-
-
Save SandeepAggarwal/0875c20af29b0f03d7caa21f035b060a to your computer and use it in GitHub Desktop.
Insertion in a Binary tree
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import UIKit | |
import PlaygroundSupport | |
class TreeNode { | |
var data: Int | |
var left: TreeNode? | |
var right: TreeNode? | |
init(data: Int) { | |
self.data = data | |
} | |
} | |
class BinaryTree { | |
var root: TreeNode | |
init(root: TreeNode) { | |
self.root = root | |
} | |
/// 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 | |
} | |
func insertInLevelOrder(newNode: TreeNode) { | |
var queue = [TreeNode?]() | |
queue.append(root) | |
while !queue.isEmpty { | |
guard let node = queue.removeFirst() else { continue } | |
if (node.left != nil) && (node.right != nil) { | |
queue.append(node.left) | |
queue.append(node.right) | |
} else { | |
if (node.right == nil) { | |
node.right = newNode | |
} else { | |
node.left = newNode | |
} | |
return | |
} | |
} | |
} | |
} | |
let node10 = TreeNode(data: 10) | |
let node11 = TreeNode(data: 11) | |
let node9 = TreeNode(data: 9) | |
let node7 = TreeNode(data: 7) | |
let node15 = TreeNode(data: 15) | |
let node8 = TreeNode(data: 8) | |
node10.left = node11 | |
node10.right = node9 | |
node11.left = node7 | |
node9.left = node15 | |
node9.right = node8 | |
let tree = BinaryTree(root: node10) | |
print("levelOrder: ", tree.levelOrderTraversal()) | |
tree.insertInLevelOrder(newNode: TreeNode(data: 12)) | |
print("levelOrder after insertion: ", tree.levelOrderTraversal()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment