, 7 min read
Pada tutorial kali ini kita akan membuat binary tree didalam bahasa pemrograman Golang.
Binary tree adalah struktur data berhierarki dalam ilmu komputer dan struktur data, yang terdiri dari simpul-simpul atau node-node yang diatur dalam suatu hierarki. Setiap node dalam binary tree memiliki setidaknya dua cabang atau anak-anak, yang dikenal sebagai sub-pohon kiri dan sub-pohon kanan.
Contoh penggunaan binary tree
Pada contoh ini kita akan membuat struktur data Menu dimana ada parent dan child yang saling berelasi satu sama lain.
Kita akan menggunakan bahasa pemrograman golang untuk membuat struktur binary tree dari Flat akan diubah menjadi struktur tree.
Buat struct untuk Menu
type Menu struct {
ID int
ParentID int
MenuName string `json:"menu_name"`
MenuPath string `json:"menu_path"`
Children []*Menu
}
}
Source yang akan kita gunakan adalah
menus := []*Menu{
{
ID: 1,
ParentID: 0,
MenuName: "Home 1",
},
{
ID: 2,
ParentID: 1,
MenuName: "Home 2",
},
{
ID: 3,
ParentID: 2,
MenuName: "Home 3",
},
{
ID: 4,
ParentID: 0,
MenuName: "Dashboard 1",
},
{
ID: 5,
ParentID: 4,
MenuName: "Dashboard 2",
},
{
ID: 6,
ParentID: 5,
MenuName: "Dashboard 3",
},
{
ID: 7,
ParentID: 6,
MenuName: "Dashboard 4",
},
{
ID: 8,
ParentID: 7,
MenuName: "Dashboard 5",
},
{
ID: 9,
ParentID: 8,
MenuName: "Dashboard 6",
},
{
ID: 10,
ParentID: 9,
MenuName: "Dashboard 7",
},
}
Buat file main.go
Buat fungsi creatreTree
func createTree(nodes []*Menu) []*Menu {
nodeMap := make(map[int]*Menu)
// Create a mapping of ID to Menu
for _, node := range nodes {
nodeMap[node.ID] = node
}
// Iterate through nodes to build the tree
var root []*Menu
for _, node := range nodes {
parentID := node.ParentID
if parentID == 0 {
// Node is the root
root = append(root, node)
} else {
// Node has a parent, add it to the parent's children
parentNode := nodeMap[parentID]
if parentNode != nil {
parentNode.Children = append(parentNode.Children, node)
}
}
}
return root
}
Kemudian buat fungsi main
func main() {
menus := []*Menu{
{
ID: 1,
ParentID: 0,
MenuName: "Home 1",
},
{
ID: 2,
ParentID: 1,
MenuName: "Home 2",
},
{
ID: 3,
ParentID: 2,
MenuName: "Home 3",
},
{
ID: 4,
ParentID: 0,
MenuName: "Dashboard 1",
},
{
ID: 5,
ParentID: 4,
MenuName: "Dashboard 2",
},
{
ID: 6,
ParentID: 5,
MenuName: "Dashboard 3",
},
{
ID: 7,
ParentID: 6,
MenuName: "Dashboard 4",
},
{
ID: 8,
ParentID: 7,
MenuName: "Dashboard 5",
},
{
ID: 9,
ParentID: 8,
MenuName: "Dashboard 6",
},
{
ID: 10,
ParentID: 9,
MenuName: "Dashboard 7",
},
}
trees := createTree(menus)
b, _ := json.Marshal(trees)
fmt.Println(string(b))
}
Full Code
package main
import (
"encoding/json"
"fmt"
)
type Menu struct {
ID int
ParentID int
MenuName string `json:"menu_name"`
MenuPath string `json:"menu_path"`
Children []*Menu
}
func createTree(nodes []*Menu) []*Menu {
nodeMap := make(map[int]*Menu)
// Create a mapping of ID to Menu
for _, node := range nodes {
nodeMap[node.ID] = node
}
// Iterate through nodes to build the tree
var root []*Menu
for _, node := range nodes {
parentID := node.ParentID
if parentID == 0 {
// Node is the root
root = append(root, node)
} else {
// Node has a parent, add it to the parent's children
parentNode := nodeMap[parentID]
if parentNode != nil {
parentNode.Children = append(parentNode.Children, node)
}
}
}
return root
}
func main() {
menus := []*Menu{
{
ID: 1,
ParentID: 0,
MenuName: "Home 1",
},
{
ID: 2,
ParentID: 1,
MenuName: "Home 2",
},
{
ID: 3,
ParentID: 2,
MenuName: "Home 3",
},
{
ID: 4,
ParentID: 0,
MenuName: "Dashboard 1",
},
{
ID: 5,
ParentID: 4,
MenuName: "Dashboard 2",
},
{
ID: 6,
ParentID: 5,
MenuName: "Dashboard 3",
},
{
ID: 7,
ParentID: 6,
MenuName: "Dashboard 4",
},
{
ID: 8,
ParentID: 7,
MenuName: "Dashboard 5",
},
{
ID: 9,
ParentID: 8,
MenuName: "Dashboard 6",
},
{
ID: 10,
ParentID: 9,
MenuName: "Dashboard 7",
},
}
trees := createTree(menus)
b, _ := json.Marshal(trees)
fmt.Println(string(b))
}
Jalankan perintah go run . untuk menjalankan log
fungsi diatas akan menghasilkan data seperti berikut:
[
{
"ID": 1,
"ParentID": 0,
"menu_name": "Home 1",
"menu_path": "",
"Children": [
{
"ID": 2,
"ParentID": 1,
"menu_name": "Home 2",
"menu_path": "",
"Children": [
{
"ID": 3,
"ParentID": 2,
"menu_name": "Home 3",
"menu_path": "",
"Children": null
}
]
}
]
},
{
"ID": 4,
"ParentID": 0,
"menu_name": "Dashboard 1",
"menu_path": "",
"Children": [
{
"ID": 5,
"ParentID": 4,
"menu_name": "Dashboard 2",
"menu_path": "",
"Children": [
{
"ID": 6,
"ParentID": 5,
"menu_name": "Dashboard 3",
"menu_path": "",
"Children": [
{
"ID": 7,
"ParentID": 6,
"menu_name": "Dashboard 4",
"menu_path": "",
"Children": [
{
"ID": 8,
"ParentID": 7,
"menu_name": "Dashboard 5",
"menu_path": "",
"Children": [
{
"ID": 9,
"ParentID": 8,
"menu_name": "Dashboard 6",
"menu_path": "",
"Children": [
{
"ID": 10,
"ParentID": 9,
"menu_name": "Dashboard 7",
"menu_path": "",
"Children": null
}
]
}
]
}
]
}
]
}
]
}
]
}
]
Related Posts
Membuat Binary Tree Dari Flat Data Di Golang
Pada tutorial kali ini kita akan membuat binary tree didalam bahasa pemrograman Golang.
Membangun Aplikasi Desktop dengan Golang (Wails) & React
Pada tutorial kali ini, kita akan membuat aplikasi desktop menggunakan Golang(Wails) dan React.
Tags