Tôi có một cây nút bộ nhớ rất lớn và cần phải đi qua cây. Truyền các giá trị được trả về của mỗi nút con vào nút cha của chúng. Điều này phải được thực hiện cho đến khi tất cả các nút có bong bóng dữ liệu của chúng lên đến nút gốc.
Traversal hoạt động như thế này.
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);
}
Điều này hoạt động tốt, nhưng tôi lo lắng rằng ngăn xếp cuộc gọi giới hạn kích thước của cây nút.
Làm thế nào mã có thể được viết lại để không có cuộc gọi đệ quy Execute
được thực hiện?