对于大型树状结构的递归,iPhone友好的替代方案?

时间:2011-04-25 10:10:00

标签: iphone objective-c algorithm recursion

我有一个相同类型的对象图。每个对象都与0,1或其他对象链接。我需要遍历图中所有可能的路径。

现在我可以通过递归来做到这一点,但存在堆栈溢出的危险。可能有数以万计。

我听说有一种方法比递归更好的方法,一种方法一直反复调用自己。

替代品看起来像什么?

2 个答案:

答案 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中。这将允许使用堆而不是堆栈内存,并可能解决堆栈溢出问题。