Рекурсия с порядком возвращаемых элементов yield в дереве

У меня есть рекурсивная функция, которая возвращает все узлы поддерева с учетом начального корневого узла.

private IEnumerable<Node> getAllNodesRecursively(Node subnode)
{
    foreach (Node node in subnode.Nodes)
        getAllNodesRecursively(node);

    yield return subnode;
}

Для следующей древовидной структуры:

A
|
+--B
|
+--C
|  |
|  +--D
|
+--E

Когда я пытаюсь выполнить итерацию как таковую :

foreach (Node n in getAllNodesRecursively(a))
{
    Console.WriteLine(n);
}

функция возвращает только значение A.

Я хочу использовать yield-return с рекурсией и извлекать элементы в предварительном порядке (A, B, C, D, E в этом примере).

( Если я поставлю возврат yield return перед foreach, foreach никогда не произойдет).

Возможно ли это?

9
задан Kornelije Petak 3 February 2012 в 10:03
поделиться