Native binary tree implementation based on GLib Balanced Binary Trees (GTree) for Node.js
npm install node-btree




Node.js native Balanced Binary Tree bindings to GTree from GLib.
Writen on C with N-API.
The module implements Map interface: set(), get(), has(), etc.
It has one additional property: height that store bTree height, and natively support map/reduce/filter operations.
See: CHANGELOG.md
See: GitHub Wiki
* All methods will compiled for GLIB version >= 2.68 only!
* Same as GTree:
> The tree may not be modified while iterating over it (you can't add/remove items).
* Node.js >= 12.
* Support building on POSIX platforms only at this moment.
* CMake tool.
* pkg-config tool (on POSIX)
* libglib binary & C headers
On Ubuntu GNU/Linux this packages must be installed:
* cmake
* build-essentials
* libglib2.0-dev
On MacOS use brew and install:
* cmake
* pkg-config
* glib
``js
/**
* Basic
*/
const { BTree } = require("node-btree");
function comparator(a, b) {
if (a > b) {
return 1;
}
else if (a < b) {
return -1;
}
else {
return 0;
}
}
const btree = new BTree(comparator);
btree.set("50", 50);
btree.set("30", 30);
btree.set("15", 150);
btree.get("15");
// 150
btree.has("30");
// true
btree.forEach((val, key) => {
console.log(key, val);
});
// "15" 150
// "30" 30
// "50" 50
btree.map((val) => val);
// [150, 30, 50]
btree.reduce((acc, val) => acc + val, 0);
// 230
btree.size;
// 3
btree.height;
// 2
/**
* From Map()
*/
const map = new Map();
map.set(10, "10");
map.set(30, "30");
map.set(80, "80");
map.set(20, "20");
map.set(50, "50");
const btree2 = BTree.from(comparator, map);
btree.size;
// 5
btree.get(30);
// "30"
/**
* From iterable
*/
function* generator() {
for (let i = 0; i < 1000; i++) {
yield {
key: i,
value: ${i}
};
}
}
const btree = BTree.from(comparator, generator());
btree.size;
// 1000
btree.height;
// 10
btree.get(500);
// "500"
``
See more docs here: GitHub Wiki