Ich habe einen sehr großen Knotenbaum im Speicher und muss den Baum durchlaufen. Übergeben der zurückgegebenen Werte jedes untergeordneten Knotens an den übergeordneten Knoten. Dies muss getan werden, bis alle Knoten ihre Datenblase bis zum Wurzelknoten haben.
Traversal funktioniert so.
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);
}
Dies funktioniert einwandfrei, aber ich bin besorgt, dass der Aufrufstapel die Größe des Knotenbaums begrenzt.
Wie kann der Code umgeschrieben werden, damit keine rekursiven Aufrufe Execute
erfolgen?