У мене дуже велике дерево вузла пам'яті і мені потрібно об'їхати дерево. Передача повернених значень кожного дочірнього вузла їх батьківському вузлу. Це потрібно зробити до тих пір, поки всі вузли не мають міхура даних до кореневого вузла.
Траверсаль працює так.
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
?