В этой статье я собираюсь написать программу, которая будет использовать генераторы javascript для обхода двоичного дерева.

class Node {
    constructor(value) {
        this.data = value;
    }
}
class BinaryTree {
    constructor() {
        this.root = new Node(5);
        this.root.left = new Node(10);
        this.root.right = new Node(20);
    }
    * start() {
        const root = this.root;
        const stack = [root];
        while (stack.length > 0) {
            const node = stack.shift();
            yield node.data;
            if (node.left) {
                stack.push(node.left)
            }
            if (node.right) {
                stack.push(node.right)
            }
        }
    }
}
const tree = new BinaryTree();
const iterator = tree.start();
let g = iterator.next();
while (!g.done) {
    console.log("value", g.value);
    g = iterator.next();
}

Как насчет создания итераторов без использования генератора javascript по умолчанию. В этом случае вы можете поместить элемент yield в другой стек, который будет использоваться для итерации.