A robust, generic B-Tree implementation for Zig.
- Generic (any comparable key type, any value type)
- Key-value pair support (like a map or database index)
- Allocator-safe
- Simple API:
insert(key, value),search(key),delete(key),deinit - Iterator for in-order traversal
- MIT Licensed
zig fetch --save git+https://github.com/dayvster/zig-btreeAdd this repo as a dependency in your build.zig.zon:
dependency btree = "git+https://github.com/yourusername/btree"
Or, if using build.zig directly:
const btree = b.dependency("btree", .{
.url = "https://github.com/yourusername/btree",
});
exe.addModule("btree", btree.module("btree"));Then import in your code:
const btree = @import("btree");const std = @import("std");
const btree_mod = @import("btree");
// Comparison function for integer keys
fn intCompare(a: i32, b: i32) std.math.Order {
return if (a < b) .lt else if (a > b) .gt else .eq;
}
pub fn main() !void {
var gpa = std.heap.page_allocator;
// Create a B-tree of i32 keys and i32 values, min degree 2
var tree = btree_mod.BTree(i32, i32).init(&gpa, 2, intCompare);
defer tree.deinit();
// Insert key-value pairs
try tree.insert(10, 100);
try tree.insert(20, 200);
try tree.insert(5, 50);
// Search for a key
const found = tree.search(20);
if (found) |pair| {
std.debug.print("Found: key={} value={}\n", .{pair.key, pair.value});
}
// Iterate all key-value pairs in order
var it = try tree.Iterator.init(&tree);
defer it.deinit();
while (it.next()) |pair| {
std.debug.print("{} => {}\n", .{pair.key, pair.value});
}
}See examples/ for more.
- Main implementation:
src/btree.zig - Examples:
examples/ - Tests:
src/main.zig
This project is licensed under the MIT License.