flat-tree

A series of functions to map a binary tree to a list

MIT 18 个版本
安装
npm install flat-tree
yarn add flat-tree
pnpm add flat-tree
bun add flat-tree
README

flat-tree

A series of functions to map a binary tree to a list

npm install flat-tree

Usage

You can represent a binary tree in a simple flat list using the following structure

      3
  1       5
0   2   4   6  ...

This module exposes a series of functions to help you build and maintain this data structure

var tree = require('flat-tree')
var list = []

var i = tree.index(0, 0) // get array index for depth: 0, offset: 0
var j = tree.index(1, 0) // get array index for depth: 1, offset: 0

// use these indexes to store some data

list[i] = 'a'
list[j] = 'b'
list[tree.parent(i)] = 'parent of a and b'

API

index = tree.index(depth, offset)

Returns an array index for the tree element at the given depth and offset.

parentIndex = tree.parent(index)

Returns the index of the parent element in tree.

siblingIndex = tree.sibling(index)

Returns the index of this elements sibling.

children = tree.children(index)

Returns an array [leftChild, rightChild] with the indexes of this elements children. If this element does not have any children it returns null.

range = tree.spans(index)

Returns the range (inclusive) the tree root at index spans. For example tree.spans(3) would return [0, 6] (see the usage example).

index = tree.leftSpan(index)

Returns the left spanning in index in the tree index spans.

index = tree.rightSpan(index)

Returns the right spanning in index in the tree index spans.

count = tree.count(index)

Returns how many nodes (including parent nodes) a tree contains.

count = tree.countLeaves(index)

Returns how many nodes (excluding parent nodes) a tree contains.

depth = tree.depth(index)

Returns the depth of an element.

offset = tree.offset(index, [depth])

Returns the relative offset of an element.

roots = tree.fullRoots(index)

Returns a list of all the full roots (subtrees where all nodes have either 2 or 0 children) < index. For example fullRoots(8) returns [3] since the subtree rooted at 3 spans 0 -> 6 and the tree rooted at 7 has a child located at 9 which is >= 8.

iterator = tree.iterator(index)

Create a stateful tree iterator starting at a given index. The iterator exposes the following methods.

index = iterator.next()

Move the iterator the next item in the tree.

index = iterator.prev()

Move the iterator the prev item in the tree.

iterator.seek(index)

Move the iterator the this specific tree index.

index = iterator.parent()

Move the iterator to the current parent index.

index = iterator.leftChild()

Move the iterator to the current left child index.

index = iterator.rightChild()

Move the iterator to the current right child index.

index = iterator.leftSpan()

Move the iterator to the current left span index.

index = iterator.rightSpan()

Move the iterator to the current right span index.

bool = iterator.isLeft()

Is the iterator at a left sibling?

bool = iterator.isRight()

Is the iterator at a right sibling?

index = iterator.sibling()

Move the iterator to the current sibling.

count = iterator.count()

Returns how many nodes (including parent nodes) the current tree contains.

count = iterator.countLeaves()

Returns how many nodes (excluding parent nodes) the current tree contains.

See also

License

MIT

版本列表
1.13.0 2025-09-12
1.12.1 2024-11-02
1.12.0 2024-10-23
1.11.0 2024-07-16
1.10.0 2023-11-04
1.9.0 2021-10-28
1.8.0 2020-12-03
1.7.0 2020-11-16
1.6.0 2017-02-28
1.5.0 2017-02-22
1.4.0 2016-03-07
1.3.0 2015-11-30
1.2.1 2015-10-07
1.2.0 2015-09-20
1.1.1 2015-09-05
1.1.0 2015-07-21
1.0.1 2015-06-15
1.0.0 2015-06-15