Tree Operations in Golang

Prince Pereira
1 min readJan 21, 2022

Tree operations [Insertion, Inorder, Postorder, Level order] Explained

package mainimport (
"fmt"
)
type Node struct {
Val int
Left *Node
Right *Node
}
func NewNode(val int) *Node {
node := &Node{Val: val}
return node
}
func AddNode(head *Node, val int) *Node {
if head == nil {
return NewNode(val)
}
tmp := head
for tmp != nil {
if val < tmp.Val {
if tmp.Left == nil {
tmp.Left = NewNode(val)
return head
} else {
tmp = tmp.Left
}
} else {
if tmp.Right == nil {
tmp.Right = NewNode(val)
return head
} else {
tmp = tmp.Right
}
}
}
return head
}
func CreateTree() (head *Node) {
head = AddNode(head, 50)
head = AddNode(head, 30)
head = AddNode(head, 70)
head = AddNode(head, 20)
head = AddNode(head, 40)
head = AddNode(head, 60)
head = AddNode(head, 80)
return head
}
func inorder(head *Node) {
if head == nil {
return
}
inorder(head.Left)
fmt.Print(head.Val, " ")
inorder(head.Right)
}
func postorder(head *Node) {
if head == nil {
return
}
postorder(head.Left)
postorder(head.Right)
fmt.Print(head.Val, " ")
}
func levelOrder(head *Node) {q := make([]*Node, 0)
q = append(q, head)
for len(q) > 0 {
front := q[0]
fmt.Print(front.Val, " ")
if front.Left != nil {
q = append(q, front.Left)
}
if front.Right != nil {
q = append(q, front.Right)
}
q = q[1:]
}
}
func main() {
head := CreateTree()
fmt.Println("Inorder : ")
inorder(head)
fmt.Println("\nPostorder : ")
postorder(head)
fmt.Println("\nLevel Order : ")
levelOrder(head)
}

--

--

Prince Pereira

Senior Software Engineer - Microsoft | SDN | Java | Golang | DS & Algo | Microservices | Kubernetes | Docker | gRPC & Protocol Buffer