Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/obitech/go-trees
BST, Red-Black-Tree & Interval Tree in Golang
https://github.com/obitech/go-trees
binary-search-tree golang interval-tree redblack-tree
Last synced: 12 days ago
JSON representation
BST, Red-Black-Tree & Interval Tree in Golang
- Host: GitHub
- URL: https://github.com/obitech/go-trees
- Owner: obitech
- License: mit
- Created: 2020-12-26T14:09:34.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-01-22T13:35:33.000Z (almost 4 years ago)
- Last Synced: 2024-06-20T22:33:43.314Z (5 months ago)
- Topics: binary-search-tree, golang, interval-tree, redblack-tree
- Language: Go
- Homepage:
- Size: 50.8 KB
- Stars: 10
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-tree: Tree implementations in Golang
## package [bst](./bst)
Implements a [Binary Search Tree](https://en.wikipedia.org/wiki/Binary_search_tree).
## package [redblack](./redblack)
Implements a [Red-Black-Tree](https://en.wikipedia.org/wiki/Red%E2%80%93black_tree).
### Example
```go
tree := NewRedBlackTree()// Operations on arbitrary keys are allow as long as the type implements they
// Key interface.
type myInt intfunc (i myInt) Less(v Key) bool {
return i < v.(myInt)
}// Insert items.
tree.Upsert(myInt(5), "test")
tree.Upsert(myInt(10), "foo")
tree.Upsert(myInt(15), 42)// Search for an item.
fmt.Println(tree.Search(15))// Replace a payload.
tree.Upsert(myInt(15), "bar")
```### Benchmarks
````
goos: darwin
goarch: amd64
pkg: github.com/obitech/go-tree/redblack
BenchmarkRBTree_Upsert-8 2012917 775 ns/op 31 B/op 0 allocs/op
BenchmarkRBTree_Search10_000-8 11450182 102 ns/op 0 B/op 0 allocs/op
BenchmarkRBTree_Search100_000-8 5394513 235 ns/op 0 B/op 0 allocs/op
BenchmarkRBTree_Search1_000_000-8 411782 2487 ns/op 117 B/op 3 allocs/op
BenchmarkRBTree_Delete10_000-8 25755091 43.7 ns/op 0 B/op 0 allocs/op
BenchmarkRBTree_Delete100_000-8 23051653 46.5 ns/op 0 B/op 0 allocs/op
BenchmarkRBTree_Delete1_000_000-8 37518 26899 ns/op 1291 B/op 43 allocs/op
````## package [interval](./interval)
Implements an [Interval tree](https://en.wikipedia.org/wiki/Interval_tree)
### Example
```go
tree := NewIntervalTree()nov, err := NewInterval(newTime(t, "2020-Nov-01"), newTime(t, "2020-Nov-02"))
if err != nil {
panic(err)
}feb, err := NewInterval(newTime(t, "2020-Feb-01"), newTime(t, "2020-Feb-02"))
if err != nil {
panic(err)
}dec, err := NewInterval(newTime(t, "2020-Dec-01"), newTime(t, "2020-Dec-02"))
if err != nil {
panic(err)
}tree.Upsert(nov)
tree.Upsert(feb)
tree.Upsert(dec)search1, err := NewInterval(newTime(t, "2020-Feb-01"), newTime(t, "2021-Feb-02"))
r, err := tree.FindFirstOverlapping(search)
if err != nil {
fmt.Println("no overlapping interval found for %s", search1)
}r, err = tree.FindAllOverlapping(search)
if err != nil {
fmt.Println("no overlapping interval found for %s", search1)
}
```### Benchmarks
TODO