Skip to content

Commit

Permalink
Add Tree level-order traversal in golang
Browse files Browse the repository at this point in the history
  • Loading branch information
ayushin78 committed Aug 14, 2018
1 parent fa3b5b7 commit cd33e76
Showing 1 changed file with 103 additions and 0 deletions.
103 changes: 103 additions & 0 deletions Tree_Levelorder_Traversal/Tree_Levelorder_Traversal.go
@@ -0,0 +1,103 @@
package main

import (
"fmt"
)

// Queue represents the queue
type Queue struct {
front *QueueNode
rear *QueueNode
size int
}

// QueueNode struct represents the nodes present in the Queue
type QueueNode struct {
Node BinaryTreeNode
next *QueueNode
}

// BinaryTreeNode represents the nodes of the tree
type BinaryTreeNode struct {
data int
left *BinaryTreeNode
right *BinaryTreeNode
}

func (q *Queue) enqueue(n *BinaryTreeNode) {
newNode := QueueNode{
Node: *n,
next: nil,
}

if q.size == 0 {
q.front = &newNode
q.rear = &newNode
} else {
q.rear.next = &newNode
q.rear = q.rear.next
}
q.size++
}

func (q *Queue) dequeue() *BinaryTreeNode {
if q.size == 0 {
return nil
}

n := q.front.Node
q.size--

if q.size > 0 {
q.front = q.front.next
} else {
q.front = nil
q.rear = nil
}

return &n

}

func (q *Queue) isEmpty() bool {
if q.size == 0 {
return true
}
return false
}

func newNode(i int) *BinaryTreeNode {
return &BinaryTreeNode{
data: i,
}
}

// PrintLevelorder prints the Level Order Traversal of the tree
func (nptr *BinaryTreeNode) PrintLevelorder() {
if nptr == nil {
return
}

q := Queue{}
q.enqueue(nptr)
for q.size > 0 {
currentptr := q.dequeue()
if currentptr.left != nil {
q.enqueue(currentptr.left)
}
if currentptr.right != nil {
q.enqueue(currentptr.right)
}
fmt.Print(currentptr.data, " ")
}
}

func main() {
root := newNode(1)
root.left = newNode(2)
root.right = newNode(3)
root.left.left = newNode(4)
root.left.right = newNode(5)
root.right.right = newNode(6)
root.PrintLevelorder()
}

0 comments on commit cd33e76

Please sign in to comment.