---
title: "Tree Traversal with ES6 Generator"
description: "Implementing depth-first tree traversal algorithms using ES6 generators. Practical notes and code examples on Tree Traversal."
url: "https://h3manth.com/scribe/tree-traversal-with-es6-generator/"
canonical_url: "https://h3manth.com/scribe/tree-traversal-with-es6-generator/"
markdown_url: "https://h3manth.com/scribe/blog/tree-traversal-with-es6-generator.md"
publishDate: "2014-03-14T00:00:00.000Z"
author: "Hemanth HM"
category: "javascript"
tags: ["javascript","es6","generators","algorithms"]
word_count: 165
reading_time_minutes: 1
x_markdown_tokens: 419
content_signal: "ai-train=yes, search=yes, ai-input=yes"
---

# Tree Traversal with ES6 Generator

> Implementing depth-first tree traversal algorithms using ES6 generators. Practical notes and code examples on Tree Traversal.

Depth-first tree traversals using ES6 generators, influenced by [PEP-0255](http://legacy.python.org/dev/peps/pep-0255/).

## Traversal Algorithms

### In-order

```javascript
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](https://github.com/hemanth/gntr) for this - happy hacking!
