У меня очень большое в памяти дерево узлов и мне нужно пройти по дереву. Передача возвращенных значений каждого дочернего узла их родительскому узлу. Это должно быть сделано до тех пор, пока все узлы не получат свои пузырьки данных до корневого узла.
Обход работает так.
private Data Execute(Node pNode)
{
Data[] values = new Data[pNode.Children.Count];
for(int i=0; i < pNode.Children.Count; i++)
{
values[i] = Execute(pNode.Children[i]); // recursive
}
return pNode.Process(values);
}
public void Start(Node pRoot)
{
Data result = Execute(pRoot);
}
Это работает нормально, но я беспокоюсь, что стек вызовов ограничивает размер дерева узлов.
Как можно переписать код, чтобы не было рекурсивных вызовов Execute
?