我有一个相同类型的对象图。每个对象都与0,1或其他对象链接。我需要遍历图中所有可能的路径。
现在我可以通过递归来做到这一点,但存在堆栈溢出的危险。可能有数以万计。
我听说有一种方法比递归更好的方法,一种方法一直反复调用自己。
替代品看起来像什么?
答案 0 :(得分:2)
有些事情:
(假设TreeNode包含属性NSArray * children)
-(void)iterateOverTree:(TreeNode *)node
{
NSMutableArray * elements = [NSMutableArray array];
[elements addObject:node];
while([elements count])
{
TreeNode * current = [elements objectAtIndex:0];
[self doStuffWithNode:current];
for(TreeNode * child in current.children)
{
[elements addObject:child];
}
[elements removeObjectAtIndex:0];
}
}
小心,未经测试的代码:)
答案 1 :(得分:1)
你可以自己“模仿”堆叠,将当前状态存储在NSArray中。这将允许使用堆而不是堆栈内存,并可能解决堆栈溢出问题。