如何修改此树迭代代码以有序方式迭代?

时间:2011-04-25 15:20:16

标签: objective-c recursion graph iteration

这段代码遍历TreeNode对象的树,其中每个对象都可能有子对象(来自对这个问题的回答:iPhone-friendly alternative to recursion over huge tree structures?)。

-(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];
    }
}

问题是这段代码没有按顺序遍历树。

即。我有这个: A拥有B,J B拥有C拥有D拥有E J拥有K拥有L拥有M. (注意:“拥有”是指“有孩子”.A有两个孩子,其余有一个或没有孩子)

这是遍历树的方式:A,B,J,C,K,D,L,......

但我想要: A,B,C,D,E, J,K,L,M,......

以有序的方式,就像递归一样。

我怎么能以这样的方式改变它,以便遍历有序的树,就像上面的例子一样?

1 个答案:

答案 0 :(得分:1)

你想要depth first search。目前您正在执行breadth first search

我不知道Objective-C,但看起来你正在使用NSMutableArray as a queue。将它用作非递归深度优先搜索的堆栈。