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
/** * 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
