as-avl-tree

1.6.3 • Public • Published

An AssemblyScript implementation of the AVL tree data structure (port of ts-avl-tree).

Features

  • 100% test coverage
  • Supports all common tree operations
  • Store keys with optional associated values
  • Optional custom compare function that can utilize both key and value to give full control over the order of the data

Install

npm install --save @tyriar/avl-tree

Usage

See the typings file for the full API.

// Import npm module
import { AvlTree } from "@tyriar/avl-tree";

// Construct AvlTree
const tree = new AvlTree<i32>();

// Insert keys
tree.insert(1);
tree.insert(2);
tree.insert(3);
tree.insert(4);
tree.insert(5);
console.log("size: " + tree.size);
console.log("contains 2: " + tree.contains(2));
console.log("contains 7: " + tree.contains(7));
// > size: 5
// > contains 2: true
// > contains 7: false

// Delete a key
tree.delete(2);
console.log("size: " + tree.size);
console.log("contains 2: " + tree.contains(2));
// > size: 4
// > contains 2: false

// Construct custom compare AvlTree
const tree2 = new AvlTree<string, string>(function (a, b) {
  return a.localeCompare(b);
});
tree2.insert("a");
tree2.insert("A");
tree2.insert("b");
tree2.insert("B");

// Delete the minimum key
const minKey = tree2.findMinimum();
tree2.delete(minKey);
console.log("minKey: " + minKey);
console.log("new minKey: " + tree2.findMinimum());
// > min key: 'a'
// > new min key: 'A'

AssemblySCript quirks

Note that these AvlTree and AvlTreeMap implementation have the same limitation as the implementation of Map in the AssemblyScript stdlib: namely, because undefined cannot be represented and (not all types are nullable)[https://www.assemblyscript.org/types.html#nullability], using .get on a missing key will result in an error, as will using .findMinimum() and .findMaximum() on an empty tree.

Therefore, one must unfortuntately do a manual validity check when using these methods, similar to what is required for Map, for example:

var tree = new AvlTreeMap<i32, string>();

var str = tree.get(1); // ERROR
var minStr = tree.findMinimum(); // ERROR

// The error can be avoided by first doing a validity check:
var str: string | null = tree.has(1) ? tree.get(1) : null; // OK
var str: string | null = tree.isEmpty() ? tree.findMinimum() : null; // OK

// Note that if the values in an AvlTreeMap are of a non-nullable
// type (such as numeric types) you'll need to expand the conditional,
// because a one-liner like the ones above won't compile

var tree = new AvlTreeMap<i32, f64>();
// `f64 | null` is not a valid type
var num: f64 | null = tree.has(1) ? tree.get(1) : null; // ERROR

Operation time complexity

Operation Complexity
contains O(log n)
delete O(log n)
findMaximum O(log n)
findMinimum O(log n)
get O(log n)
insert O(log n)
isEmpty Θ(1)
size Θ(1)

/as-avl-tree/

    Package Sidebar

    Install

    npm i as-avl-tree

    Weekly Downloads

    0

    Version

    1.6.3

    License

    MIT

    Unpacked Size

    60.1 kB

    Total Files

    32

    Last publish

    Collaborators

    • b----c