View : 223

06/05/2026 08:38am

JS2GO EP.33 Using Trees and Graphs in Go and JavaScript

JS2GO EP.33 Using Trees and Graphs in Go and JavaScript

#Data Structure

#Graph

#Tree

#Go

#JavaScript

As your system grows in complexity such as implementing search engines, pathfinding systems (GPS), or managing hierarchical data

 

data structures like Trees and Graphs become crucial for handling interconnected information efficiently.

 

In this article, we’ll explore how to implement and use Trees and Graphs in JavaScript and Go, complete with real code examples and practical best practices for production systems. 🧠

 

1. What is a Tree?

 

A Tree is a hierarchical data structure consisting of a root node and its child nodes, forming a branching structure. Common real-world use cases include:
🌲 File Systems
🏒 Organization Hierarchies
πŸ” Binary Search Trees (BST)

 

🌿 Implementing a Tree in JavaScript

class TreeNode {
  constructor(value) {
    this.value = value;
    this.children = [];
  }

  addChild(node) {
    this.children.push(node);
  }
}

// Example usage
const root = new TreeNode('Root');
const child1 = new TreeNode('Child 1');
const child2 = new TreeNode('Child 2');
root.addChild(child1);
root.addChild(child2);
child1.addChild(new TreeNode('Child 1.1'));

function traverse(node) {
  console.log(node.value);
  node.children.forEach(traverse);
}

traverse(root);

 

Output:

Root
Child 1
Child 1.1
Child 2

 

Advantages of JavaScript:
βœ”οΈ Easy to implement and highly flexible
βœ”οΈ Great for dynamic data without strict type checking
βœ”οΈ Ideal for frontend useβ€”UI trees, DOM structures, or JSON hierarchies

 

🌳 Implementing a Tree in Go

package main

import "fmt"

type Node struct {
	Value    string
	Children []*Node
}

func (n *Node) AddChild(child *Node) {
	n.Children = append(n.Children, child)
}

func Traverse(n *Node) {
	fmt.Println(n.Value)
	for _, child := range n.Children {
		Traverse(child)
	}
}

func main() {
	root := &Node{Value: "Root"}
	child1 := &Node{Value: "Child 1"}
	child2 := &Node{Value: "Child 2"}
	root.AddChild(child1)
	root.AddChild(child2)
	child1.AddChild(&Node{Value: "Child 1.1"})

	Traverse(root)
}

 

Output:

Root
Child 1
Child 1.1
Child 2

 

Advantages of Go:
βœ”οΈ Strong type safety with compile-time checking
βœ”οΈ Efficient memory management using pointers
βœ”οΈ Suitable for large-scale systems such as search engines, API traversal, or data indexing

 

2. What is a Graph?

 

A Graph is a data structure composed of nodes (vertices) and edges (connections), used to represent relationships between entities.

 

Common use cases include:
🌐 Social Networks
πŸ—ΊοΈ Map and Pathfinding systems
🎯 Recommendation Engines

 

πŸ”— Graph Implementation in JavaScript

class Graph {
  constructor() {
    this.adjacencyList = {};
  }

  addVertex(vertex) {
    if (!this.adjacencyList[vertex]) {
      this.adjacencyList[vertex] = [];
    }
  }

  addEdge(v1, v2) {
    this.adjacencyList[v1].push(v2);
    this.adjacencyList[v2].push(v1);
  }

  showConnections() {
    for (const vertex in this.adjacencyList) {
      console.log(vertex, "->", this.adjacencyList[vertex].join(", "));
    }
  }
}

const graph = new Graph();
graph.addVertex("A");
graph.addVertex("B");
graph.addVertex("C");
graph.addEdge("A", "B");
graph.addEdge("A", "C");
graph.showConnections();

 

Output:

A -> B, C
B -> A
C -> A

 

Advantages of JavaScript Graph:
βœ”οΈ Highly flexible using Object or Map
βœ”οΈ Great for visualization or frontend graph UI
βœ”οΈ Easy to model relationships like social networks or web crawlers

 

πŸ”— Graph Implementation in Go

package main

import "fmt"

type Graph struct {
	Adj map[string][]string
}

func NewGraph() *Graph {
	return &Graph{Adj: make(map[string][]string)}
}

func (g *Graph) AddVertex(vertex string) {
	if _, exists := g.Adj[vertex]; !exists {
		g.Adj[vertex] = []string{}
	}
}

func (g *Graph) AddEdge(v1, v2 string) {
	g.Adj[v1] = append(g.Adj[v1], v2)
	g.Adj[v2] = append(g.Adj[v2], v1)
}

func (g *Graph) Print() {
	for v, edges := range g.Adj {
		fmt.Printf("%s -> %v\n", v, edges)
	}
}

func main() {
	g := NewGraph()
	g.AddVertex("A")
	g.AddVertex("B")
	g.AddVertex("C")
	g.AddEdge("A", "B")
	g.AddEdge("A", "C")
	g.Print()
}

 

Output:

A -> [B C]
B -> [A]
C -> [A]

 

Advantages of Go Graph:
βœ”οΈ Strongly typed structure ensures data consistency
βœ”οΈ Efficient handling of large and complex datasets
βœ”οΈ Ideal for backend systems such as pathfinding, network analysis, or graph databases

 

3. Best Practices

 

Use CaseIdeal ScenarioRecommended Language
Tree (UI, JSON, File System)Frontend data or visualizationJavaScript
Binary Tree / Search TreeBackend or algorithmic tasksGo
Graph (Connections / Pathfinding)Networks, social graphs, mapsBoth JavaScript & Go

 

Best Practices:
βœ… Separate node and edge structures clearly
βœ… In Go, use structs and pointers for efficient memory usage
βœ… In JavaScript, use objects or Maps for flexibility
βœ… For large data sets, use traversal algorithms such as BFS (Breadth-First Search) and DFS (Depth-First Search)

 

4. Comparison: Trees and Graphs

 

FeatureJavaScriptGo
StructureClass/Object-basedStruct & Pointer-based
PerformanceFlexible but slowerFast and memory-efficient
Built-in SupportNoneHas standard packages and struct support
Use CasesFrontend visualization / UI treeBackend algorithms / search / pathfinding

 


 

Summary

 

Both JavaScript and Go have their strengths when working with complex data structures like Trees and Graphs:
πŸ’‘ JavaScript is perfect for frontend, visualization, or UI-based trees
βš™οΈ Go excels in backend, algorithmic processing, pathfinding, and high-performance network systems

 

Next Episode

 

In EP.34 of JS2GO, we’ll dive into Heaps and Priority Queues in Go and JavaScript a critical concept behind priority scheduling, such as job queues, pathfinding, and recommendation engines. πŸš€

 

Read more

πŸ”΅ Facebook: Superdev Academy

πŸ”΄ YouTube: Superdev Academy

πŸ“Έ Instagram: Superdev Academy

🎬 TikTok: https://www.tiktok.com/@superdevacademy?lang=th-TH

🌐 Website: https://www.superdevacademy.com/en