Можно ли использовать рекурсию в итераторе, реализующем 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);
}
}
}
Возможно ли это как-то?Я понимаю, что это можно решить без рекурсии, используя деку Node
в функции GetEnumerator
.