Рекурсия в итераторе C #

Можно ли использовать рекурсию в итераторе, реализующем System.Collections.IEnumerable ? У меня древовидная структура объявлена ​​примерно так:

public class Node
{
    public Node Sibling;
    public Node Child;
}

Я хотел бы перебрать узлы в дереве. Я хотел бы сделать что-то вроде этого (псевдокод, я думаю, это не скомпилируется):

public class NodeIterator : System.Collections.IEnumerable
{
    Node m_root;

    public System.Collections.IEnumerator GetEnumerator()
    {
        recursiveYield(m_root);
    }

    System.Collections.IEnumeraton recursiveYield(Node node)
    {
        yield return node;
        if (node.Child)
        {
            recursiveYield(node.Child);
        }
        if (node.Sibling)
        {
            recursiveYield(node.Sibling);
        }
    }
}

Возможно ли это как-то? Я понимаю, что это можно решить без рекурсии, используя двухстороннюю очередь узла в функции GetEnumerator .

14
задан Andreas Brinck 17 November 2010 в 06:36
поделиться