Objective c 如何修改此树迭代代码以有序方式进行迭代?

Objective c 如何修改此树迭代代码以有序方式进行迭代?,objective-c,recursion,graph,iteration,Objective C,Recursion,Graph,Iteration,这段代码在TreeNode对象树上迭代,其中每个对象都可能有子对象(从这个问题的答案:) 问题是这段代码没有按顺序遍历树 i、 E.我有: 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 以有序的方式,就像递归一样 我怎样才能改变它,使它遍历已排序的树,如上面的示例所示?您想要的。目前你正在表演 我不知道Objectiv

这段代码在TreeNode对象树上迭代,其中每个对象都可能有子对象(从这个问题的答案:)

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

i、 E.我有: 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

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

我怎样才能改变它,使它遍历已排序的树,如上面的示例所示?

您想要的。目前你正在表演


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

您有深度优先搜索的示例吗?我不需要FIFO队列,对吗?那么我该如何从上面的代码中删除它呢?大量的在线示例:等等。我猜你需要做
removeLastObject
,但请与真正了解Objective-C的人核实一下,以确保…@BugAlert-E先生是对的。您真正需要的是每次从队列中删除最后一个对象(而不是像现在这样删除第一个对象)。'“RemovelasObject”应该适合您。您的代码将执行以下操作-1。移除最后一个对象2。用它做点什么。添加所有子项
-(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];
    }
}