https://github.com/zoubin/tree-iterator
Iterator for walking trees
https://github.com/zoubin/tree-iterator
Last synced: about 1 year ago
JSON representation
Iterator for walking trees
- Host: GitHub
- URL: https://github.com/zoubin/tree-iterator
- Owner: zoubin
- Created: 2015-05-02T04:35:04.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2015-05-09T10:14:02.000Z (about 11 years ago)
- Last Synced: 2025-05-19T21:23:17.386Z (about 1 year ago)
- Language: JavaScript
- Size: 160 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# tree-iterator
Iterator for post-order-walking trees
## Usage
```javascript
var PostOrderTree = require('tree-iterator');
```
### iterable = PostOrderTree(root, getsuccessors, visited)
* `root`: *String|Number*. It is the root (key) of tree.
* `getsuccessors`: *Function*. It accepts a node (key), and returns its successors, which can either be `Array`, or somthing `Iterable`;
* `visited`: *Object*. Used to avoid revisiting the same node in [graph walking](https://github.com/zoubin/deps-iterator). Visited nodes are excluded from later paths.
* `iterable`: *Iterable*.
### for (var node of iterable)
### iter = iterable\[Symbol.iterator\]()
### iterable.on('cycle', cb)
## Examples
**for..of**
```javascript
var PostOrderTree = require('tree-iterator');
var tree = {
0: [1, 2],
2: [3]
};
var ordered = [];
var nodes = PostOrderTree(0, function (node) {
return tree[node];
});
for (var n of nodes) {
ordered.push(n);
}
console.log('ordered:', ordered);
```
output:
```
⌘ node examples/no-cycle.js
ordered: [ 1, 3, 2, 0 ]
```
**.on('cycle', cb)**
```javascript
var PostOrderTree = require('tree-iterator');
var tree = {
0: [1],
1: [2],
2: [3, 0]
};
var nodes = PostOrderTree(0, function (node) {
return tree[node];
});
var ordered = [];
nodes.on('cycle', function (cycle) {
// cycle detected: [0, 1, 2, 0]
console.log('cycle detected:', cycle);
});
for (var n of nodes) {
ordered.push(n);
}
// [3, 2, 1, 0]
console.log('ordered:', ordered);
```
output:
```
⌘ node examples/cycle.js
ordered: [ 3, 2, 1, 0 ]
cycle detected: [ 0, 1, 2, 0 ]
```
**iterable\[Symbol.iterator\]()**
```javascript
var PostOrderTree = require('tree-iterator');
var tree = {
0: [1],
1: [2],
2: [3]
};
var nodes = PostOrderTree(0, function (node) {
return tree[node];
});
var iter = nodes[Symbol.iterator]();
console.log(iter.next()); // { value: 3, done: false }
console.log(iter.next()); // { value: 2, done: false }
console.log(iter.next()); // { value: 1, done: false }
console.log(iter.next()); // { value: 0, done: false }
console.log(iter.next()); // { value: undefined, done: true }
```
output:
```
⌘ node examples/iter.js
{ value: 3, done: false }
{ value: 2, done: false }
{ value: 1, done: false }
{ value: 0, done: false }
{ value: undefined, done: true }
```