UNPKG

flat-tree

Version:

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

168 lines (99 loc) 4.22 kB
# 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 ``` js 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 - [mafintosh/print-flat-tree][print]: A cli that can pretty print flat-trees. - [bcomnes/flattree][ftg]: A port of the node module to Go. - [arablocks/flat-tree.c](c): A port of the module to C - [datkt/flat-tree][kt]: A port of the module to Kotlin - [datrs/flat-tree][rs]: A port to Rust. - [bcomnes/flattree][ftg]: A port to Go. - [noffle/cl-flat-tree][clft]: A port to Common Lisp. - [dukeraphaelng/flat_tree][cr]: A port to Crystal. ## License MIT [print]: https://github.com/mafintosh/print-flat-tree [rs]: https://github.com/datrs/flat-tree [ftg]: https://github.com/bcomnes/flattree [c]: https://github.com/arablocks/flat-tree.c [kt]: https://github.com/datkt/flat-tree [clft]: https://github.com/noffle/cl-flat-tree [cr]: https://github.com/dukeraphaelng/flat_tree