Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
[![Go Report Card](https://goreportcard.com/badge/github.com/johnfercher/tree)](https://goreportcard.com/report/github.com/johnfercher/tree)
[![CI](https://github.com/johnfercher/tree/actions/workflows/goci.yml/badge.svg)](https://github.com/johnfercher/tree/actions/workflows/goci.yml)
[![Lint](https://github.com/johnfercher/tree/actions/workflows/golangci-lint.yml/badge.svg)](https://github.com/johnfercher/tree/actions/workflows/golangci-lint.yml)
[![Codecov](https://img.shields.io/codecov/c/github/johnfercher/tree)](https://codecov.io/gh/johnfercher/tree)

[![Codecov](https://codecov.io/gh/johnfercher/tree/branch/main/graph/badge.svg)](https://codecov.io/gh/johnfercher/tree)

A generic unbalanced tree implementation, where you can define which node will be added to each node.

Expand Down Expand Up @@ -35,11 +34,11 @@ func main() {

root, ok := tr.GetRoot()
fmt.Println(ok) // true
fmt.Println(root.Get()) // 0.0
fmt.Println(root.Get()) // 0, 0.0

node, ok := tr.Get(3)
fmt.Println(ok) // true
fmt.Println(node.Get()) // 1.3
fmt.Println(node.Get()) // 3, 1.3

structure, ok := tr.GetStructure()
fmt.Println(ok) // true
Expand All @@ -48,8 +47,7 @@ func main() {
nodes, ok := tr.Backtrack(6)
fmt.Println(ok) // true
for _, node := range nodes {
fmt.Println(node.Get()) // 2.6, 0.2, 0.0
fmt.Println(node.Get()) // 6, 2.6; 2, 0.2; 0, 0.0
}
}

```
6 changes: 3 additions & 3 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ func main() {

root, ok := tr.GetRoot()
fmt.Println(ok) // true
fmt.Println(root.Get()) // 0.0
fmt.Println(root.Get()) // 0, 0.0

node, ok := tr.Get(3)
fmt.Println(ok) // true
fmt.Println(node.Get()) // 1.3
fmt.Println(node.Get()) // 3, 1.3

structure, ok := tr.GetStructure()
fmt.Println(ok) // true
Expand All @@ -36,6 +36,6 @@ func main() {
nodes, ok := tr.Backtrack(6)
fmt.Println(ok) // true
for _, node := range nodes {
fmt.Println(node.Get()) // 2.6, 0.2, 0.0
fmt.Println(node.Get()) // 6, 2.6; 2, 0.2; 0, 0.0
}
}
1 change: 0 additions & 1 deletion pkg/example_test.go

This file was deleted.

189 changes: 189 additions & 0 deletions pkg/tree/example_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
package tree_test

import (
"fmt"

"github.com/johnfercher/tree/pkg/tree"
)

// ExampleNew demonstrates how to create tree.
func ExampleNew() {
tr := tree.New[string]()

// Add nodes do tree
tr.AddRoot(tree.NewNode(0, "root"))

// Do more things
}

// ExampleTree_AddRoot demonstrates how to add root node to tree.
func ExampleTree_AddRoot() {
tr := tree.New[int]()

tr.AddRoot(tree.NewNode(0, 42))

// Do more things
}

// ExampleTree_GetRoot demonstrates how to retrieve root node from tree.
func ExampleTree_GetRoot() {
tr := tree.New[float64]()
tr.AddRoot(tree.NewNode(0, 3.14))

node, ok := tr.GetRoot()
if !ok {
return
}
fmt.Println(node.Get())

// Do more things
}

// ExampleTree_Add demonstrates how to add node to tree.
func ExampleTree_Add() {
tr := tree.New[bool]()
tr.AddRoot(tree.NewNode(0, true))

tr.Add(0, tree.NewNode(1, false))

// Do more things
}

// ExampleTree_Get demonstrates how to retrieve node from tree.
func ExampleTree_Get() {
tr := tree.New[uint]()
tr.AddRoot(tree.NewNode(0, uint(42)))

node, ok := tr.Get(0)
if !ok {
return
}
fmt.Println(node.Get())

// Do more things
}

// ExampleTree_Backtrack demonstrates how to retrieve path of nodes from node to root.
func ExampleTree_Backtrack() {
tr := tree.New[string]()
tr.AddRoot(tree.NewNode(0, "root"))
tr.Add(0, tree.NewNode(1, "level1"))
tr.Add(1, tree.NewNode(2, "level2"))
tr.Add(2, tree.NewNode(3, "leaf"))

nodes, ok := tr.Backtrack(3)
if !ok {
return
}
for _, node := range nodes {
fmt.Println(node.Get())
}

// Do more things
}

// ExampleTree_GetStructure demonstrates how to retrieve tree structure.
func ExampleTree_GetStructure() {
tr := tree.New[string]()
tr.AddRoot(tree.NewNode(0, "root"))
tr.Add(0, tree.NewNode(1, "level1"))
tr.Add(1, tree.NewNode(2, "level2"))
tr.Add(2, tree.NewNode(3, "leaf"))

structure, ok := tr.GetStructure()
if !ok {
return
}
for _, str := range structure {
fmt.Println(str)
}

// Do more things
}

// ExampleNewNode demonstrates how to create a node.
func ExampleNewNode() {
n := tree.NewNode(0, "node")

n.Get()

// Do more things
}

// ExampleNode_Get demonstrates how to retrieve id and data from node.
func ExampleNode_Get() {
n := tree.NewNode(0, 3.14)

id, data := n.Get()
fmt.Println(id)
fmt.Println(data)

// Do more things
}

// ExampleNode_IsRoot demonstrates how to retrieve info if node is root.
func ExampleNode_IsRoot() {
n := tree.NewNode(0, 'b')

root := n.IsRoot()
fmt.Println(root)

// Do more things
}

// ExampleNode_IsLeaf demonstrates how to retrieve info if node is leaf.
func ExampleNode_IsLeaf() {
n1 := tree.NewNode(0, 'a')
n2 := tree.NewNode(0, 'b')

n1.AddNext(n2)

leaf := n2.IsLeaf()
fmt.Println(leaf)

// Do more things
}

// ExampleNode_Backtrack demonstrates how to retrieve the path between node to root.
func ExampleNode_Backtrack() {
n1 := tree.NewNode(0, 'a')
n2 := tree.NewNode(0, 'b')
n3 := tree.NewNode(0, 'c')

n1.AddNext(n2)
n2.AddNext(n3)

nodes := n3.Backtrack()
for _, node := range nodes {
fmt.Println(node.Get())
}

// Do more things
}

// ExampleNode_GetStructure demonstrates how to retrieve the tree structure from node.
func ExampleNode_GetStructure() {
n1 := tree.NewNode(0, 'a')
n2 := tree.NewNode(0, 'b')
n3 := tree.NewNode(0, 'c')

n1.AddNext(n2)
n2.AddNext(n3)

structure := n3.GetStructure()
for _, str := range structure {
fmt.Println(str)
}

// Do more things
}

// ExampleNode_AddNext demonstrates how to add a node to a parent.
func ExampleNode_AddNext() {
n1 := tree.NewNode(0, 'a')
n2 := tree.NewNode(0, 'b')

n1.AddNext(n2)

// Do more things
}