Depth-first tree traversals using ES6 generators, influenced by PEP-0255.
Traversal Algorithms
In-order
var inorder = function* inorder(node) {
if (node) {
yield* inorder(node.left);
yield node.label;
yield* inorder(node.right);
}
}
### Pre-order
javascript
var preorder = function* preorder(node) {
if (node) {
yield node.label;
yield* preorder(node.left);
yield* preorder(node.right);
}
}
### Post-order
javascript
var postorder = function* postorder(node) {
if (node) {
yield* postorder(node.left);
yield* postorder(node.right);
yield node.label;
}
}
## Create a Tree
javascript
function Tree(label, left, right) {
this.label = label;
this.left = left;
this.right = right;
}
var tree = function tree(list) {
var n = list.length;
if (n == 0) return null;
var i = Math.floor(n / 2);
return new Tree(list[i], tree(list.slice(0, i)), tree(list.slice(i + 1)));
}
## Usage
javascript
var root = tree(['A','B','C','D','E','F','G','H','I']);
var results = [];
for (let value of preorder(root)) {
results.push(value);
}
console.log(results);
// ['F', 'B', 'A', 'D', 'C', 'E', 'G', 'I', 'H']
I created a node module gntr for this - happy hacking!
#javascript#es6#generators#algorithms
About Hemanth HM
Hemanth HM is a Sr. Machine Learning Manager at PayPal, Google Developer Expert, TC39 delegate, FOSS advocate, and community leader with a passion for programming, AI, and open-source contributions.