{"id":24563625,"url":"https://github.com/monitor1379/rbtree","last_synced_at":"2025-03-17T00:24:10.100Z","repository":{"id":118275373,"uuid":"262726113","full_name":"monitor1379/rbtree","owner":"monitor1379","description":"Red Black Tree Golang Implementation","archived":false,"fork":false,"pushed_at":"2020-05-13T13:04:49.000Z","size":28,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-06T16:26:05.794Z","etag":null,"topics":["go","golang","redblacktree"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/monitor1379.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-10T06:27:02.000Z","updated_at":"2024-06-19T11:05:16.988Z","dependencies_parsed_at":null,"dependency_job_id":"b7d350b5-e991-4834-b03a-3d53277ef3bd","html_url":"https://github.com/monitor1379/rbtree","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monitor1379%2Frbtree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monitor1379%2Frbtree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monitor1379%2Frbtree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/monitor1379%2Frbtree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/monitor1379","download_url":"https://codeload.github.com/monitor1379/rbtree/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243951557,"owners_count":20373754,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","redblacktree"],"created_at":"2025-01-23T10:14:09.618Z","updated_at":"2025-03-17T00:24:10.074Z","avatar_url":"https://github.com/monitor1379.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# rbtree\n\nRed-Black Tree Golang Implementation\n\n\n## Installation\n\n```\ngo get -u -v github.com/monitor1379/rbtree\n```\n\n\n## Example\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/monitor1379/rbtree\"\n)\n\nfunc main() {\n\ttree := rbtree.NewStringRBTree()\n\n\ttree.Put(\"name\", \"monitor1379\")\n\ttree.Put(\"age\", 25)\n\n\tname, ok := tree.Get(\"name\")\n\tfmt.Println(name, ok)\n\t// print: monitor1379 true\n\n\ttree.Remove(\"age\")\n\n\tage, ok := tree.Get(\"age\")\n\tfmt.Println(age, ok)\n\t// print: \u003cnil\u003e false\n\n}\n\n```\n\n\nYou can create a rbtree object by:\n```go\nrbtree.NewIntRBTree()\nrbtree.NewStringRBTree()\nrbtree.NewRBTree(rbtree.Comparator)\n```\n\n\nNote that `rbtree.Comparator` is a type of `interface{}`: \n```go\n// Comparetor.Compare returns an integer comparing two object lexicographically.\n// The result will be 0 if a==b, -1 if a \u003c b, and +1 if a \u003e b.\n//\ntype Comparator interface {\n\tCompare(interface{}, interface{}) int\n}\n```\n\n\nSuch as:\n```go\ntype IntComparator struct{}\n\nfunc (c *IntComparator) Compare(i, j interface{}) int {\n\tii, ok := i.(int)\n\tif !ok {\n\t\tpanic(ErrInvalidInputTypeOfComparator)\n\t}\n\n\tjj, ok := j.(int)\n\tif !ok {\n\t\tpanic(ErrInvalidInputTypeOfComparator)\n\t}\n\n\tif ii \u003c jj {\n\t\treturn -1\n\t} else if ii == jj {\n\t\treturn 0\n\t}\n\treturn 1\n}\n```\n\n\n\n## Benchmark\n\nPlatform: \n```\ngoos: linux\ngoarch: amd64\npkg: github.com/monitor1379/rbtree\n```\n\nRun benchmark testing:\n```\ncd $GOPATH/src/github.com/monitor1379/rbtree\ngo test -v -bench=. -run=none .\n```\n\n\nRBTree:\n```\nBenchmarkRBTreeRandomInsert-8                    1000000              1280 ns/op\nBenchmarkRBTreeRandomInsertAndSearch-8           1000000              1092 ns/op\nBenchmarkRBTreeRandomDelete-8                    1000000              1189 ns/op\n```\n\nBinary-Search Tree:\n```\nBenchmarkBSTreeRandomInsert-8                    1000000              1491 ns/op\nBenchmarkBSTreeWorstInsert-8                       50000            126385 ns/op\n```\n\n\nGODS library:\n```\nBenchmarkGodsRBTreeRandomInsert-8                1000000              1260 ns/op\nBenchmarkGodsRBTreeRandomInsertAndSearch-8       1000000              1118 ns/op\n```\n\nGolang builtin map:\n```\nBenchmarkMapInsert-8                             3000000               500 ns/op\nBenchmarkMapRandomInsertAndSearch-8             10000000               168 ns/op\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonitor1379%2Frbtree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmonitor1379%2Frbtree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmonitor1379%2Frbtree/lists"}