Welcome To Golang By Example

Menu
  • Home
  • Blog
Menu

Binary Search Tree in Go (Golang)

Posted on December 27, 2023December 27, 2023 by admin

Table of Contents

  • Introduction
  • Full Working Code

Introduction

A binary search tree abbreviated as BST is a binary tree. For each node in a Binary Search Tree

  • Value of each node in the left  subtree is less than the current node value
  • Value of each node in the right subtree is greater than the current node value
  • Both left and right subtree are themselves Binary Search Tree

Full Working Code

package main
import "fmt"
type bstnode struct {
value int
left *bstnode
right *bstnode
}
type bst struct {
root *bstnode
}
func (b *bst) reset() {
b.root = nil
}
func (b *bst) insert(value int) {
b.insertRec(b.root, value)
}
func (b *bst) insertRec(node *bstnode, value int) *bstnode {
if b.root == nil {
b.root = &bstnode{
value: value,
}
return b.root
}
if node == nil {
return &bstnode{value: value}
}
if value <= node.value {
node.left = b.insertRec(node.left, value)
}
if value > node.value {
node.right = b.insertRec(node.right, value)
}
return node
}
func (b *bst) find(value int) error {
node := b.findRec(b.root, value)
if node == nil {
return fmt.Errorf("Value: %d not found in tree", value)
}
return nil
}
func (b *bst) findRec(node *bstnode, value int) *bstnode {
if node == nil {
return nil
}
if node.value == value {
return b.root
}
if value < node.value {
return b.findRec(node.left, value)
}
return b.findRec(node.right, value)
}
func (b *bst) inorder() {
b.inorderRec(b.root)
}
func (b *bst) inorderRec(node *bstnode) {
if node != nil {
b.inorderRec(node.left)
fmt.Println(node.value)
b.inorderRec(node.right)
}
}
func main() {
bst := &bst{}
eg := []int{2, 5, 7, -1, -1, 5, 5}
for _, val := range eg {
bst.insert(val)
}
fmt.Printf("Printing Inorder:\n")
bst.inorder()
bst.reset()
eg = []int{4, 5, 7, 6, -1, 99, 5}
for _, val := range eg {
bst.insert(val)
}
fmt.Printf("\nPrinting Inorder:\n")
bst.inorder()
fmt.Printf("\nFinding Values:\n")
err := bst.find(2)
if err != nil {
fmt.Printf("Value %d Not Found\n", 2)
} else {
fmt.Printf("Value %d Found\n", 2)
}
err = bst.find(6)
if err != nil {
fmt.Printf("Value %d Not Found\n", 6)
} else {
fmt.Printf("Value %d Found\n", 6)
}
err = bst.find(5)
if err != nil {
fmt.Printf("Value %d Not Found\n", 5)
} else {
fmt.Printf("Value %d Found\n", 5)
}
err = bst.find(1)
if err != nil {
fmt.Printf("Value %d Not Found\n", 1)
} else {
fmt.Printf("Value %d Found\n", 1)
}
}

Output:

Printing Inorder:
-1
-1
2
5
5
5
7
Printing Inorder:
-1
4
5
5
6
7
99
Finding Values:
Value 2 Not Found
Value 6 Found
Value 5 Found
Value 1 Not Found
  • binary search tree in golang
  • bst
  • Popular Articles

    Golang Comprehensive Tutorial Series

    All Design Patterns in Go (Golang)

    Slice in golang

    Variables in Go (Golang) – Complete Guide

    OOP: Inheritance in GOLANG complete guide

    Using Context Package in GO (Golang) – Complete Guide

    All data types in Golang with examples

    Understanding time and date in Go (Golang) – Complete Guide

    ©2023 Welcome To Golang By Example | Design: Web XP