Hemanth's Scribes

javascript

Tree Traversal with ES6 Generator

Author Photo

Hemanth HM

Thumbnail

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
Author Photo

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.