Реализую простой обход двоичного дерева рекурсией, почему при итерации не происходит рекурсивный вызов traverse(current.left); и traverse(current.right); ? Просто возвращается одно значение yield return current.value;
yield return всего лишь запоминает текущее положение итератора. Поэтому yield return current.value будет возвращать одно и тоже значение, первое, т.к. Вы не итерируетесь по коллекции traverse(node), нет методов, которые сделают MoveNext(). Посмотрите на вариант Михаил Макаров, там итерация происходит с помощью foreach.