131 lines
3.3 KiB
Markdown
Executable File
131 lines
3.3 KiB
Markdown
Executable File
Binary Trees [](http://travis-ci.org/vadimg/js_bintrees)
|
|
============
|
|
|
|
This package provides Binary and Red-Black Search Trees written in Javascript. It is released under the MIT License.
|
|
|
|
Binary Search Trees are a good way to store data in sorted order. A Red-Black tree is a variation of a Binary Tree that balances itself.
|
|
|
|
Algorithms were taken from Julienne Walker: http://eternallyconfuzzled.com/jsw_home.aspx
|
|
|
|
Trees
|
|
------------
|
|
|
|
* BinTree - Binary Search Tree
|
|
* RBTree - Red-Black Tree
|
|
|
|
Quickstart
|
|
------------
|
|
node.js:
|
|
|
|
```
|
|
npm install bintrees
|
|
```
|
|
|
|
```javascript
|
|
var RBTree = require('bintrees').RBTree;
|
|
|
|
var tree = new RBTree(function(a, b) { return a - b; });
|
|
|
|
tree.insert(2);
|
|
tree.insert(-3);
|
|
```
|
|
|
|
see examples/node.js for more info
|
|
|
|
In the browser:
|
|
|
|
```html
|
|
<script src="/path/to/rbtree.js"></script>
|
|
<script>
|
|
var tree = new RBTree(function(a, b) { return a - b; });
|
|
tree.insert(0);
|
|
tree.insert(1);
|
|
</script>
|
|
```
|
|
|
|
see examples/client.html for more info
|
|
|
|
Constructor
|
|
------------
|
|
|
|
Requires 1 argument: a comparator function f(a,b) which returns:
|
|
* 0 if a == b
|
|
* >0 if a > b
|
|
* <0 if a < b
|
|
|
|
Methods
|
|
------------
|
|
|
|
### insert(item)
|
|
> Inserts the item into the tree. Returns true if inserted, false if duplicate.
|
|
|
|
### remove(item)
|
|
> Removes the item from the tree. Returns true if removed, false if not found.
|
|
|
|
### size
|
|
> Number of nodes in the tree.
|
|
|
|
### clear()
|
|
> Removes all nodes from the tree.
|
|
|
|
### find(item)
|
|
> Returns node data if found, null otherwise.
|
|
|
|
### findIter(item)
|
|
> Returns an iterator to the node if found, null otherwise.
|
|
|
|
### lowerBound(item)
|
|
> Returns an iterator to the tree node at or immediately after the item. Returns null-iterator if tree is empty.
|
|
>> __NOTE: Changed in version 1.0.0 to match C++ lower_bound__
|
|
|
|
### upperBound(item)
|
|
> Returns an iterator to the tree node immediately after the item. Returns null-iterator if tree is empty.
|
|
>> __NOTE: Changed in version 1.0.0 to match C++ upper_bound__
|
|
|
|
### min()
|
|
> Returns the min node data in the tree, or null if the tree is empty.
|
|
|
|
### max()
|
|
> Returns the max node data in the tree, or null if the tree is empty.
|
|
|
|
### each(f)
|
|
> Calls f on each node's data, in order.
|
|
|
|
### reach(f)
|
|
> Calls f on each node's data, in reverse order.
|
|
|
|
### iterator()
|
|
> Returns a null-iterator. See __Iterators__ section below.
|
|
|
|
Iterators
|
|
------------
|
|
|
|
tree.iterator() will return a null-iterator. On a null iterator,
|
|
* next() will return the first element in the tree
|
|
* prev() will return the last element in the tree
|
|
|
|
Otherwise,
|
|
* next() will return the next element
|
|
* prev() will return the previous element
|
|
* data() will return the node the iterator is pointing to
|
|
|
|
When iteration reaches the end, the iterator becomes a null-iterator again.
|
|
|
|
Forward iteration example:
|
|
|
|
```javascript
|
|
var it=tree.iterator(), item;
|
|
while((item = it.next()) !== null) {
|
|
// do stuff with item
|
|
}
|
|
```
|
|
|
|
If you are iterating forward through the tree, you can always call prev() to go back, and vice versa.
|
|
|
|
__NOTE:__ iterators become invalid when you add or remove elements from the tree.
|
|
|
|
## Production Usage
|
|
|
|
* [Coinbase Exchange](https://exchange.coinbase.com/), since Jan 26, 2015.
|
|
* If you are using this in production, please let me know! (add your company to this README in a pull request)
|