这段代码遍历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,......
以有序的方式,就像递归一样。
我怎么能以这样的方式改变它,以便遍历有序的树,就像上面的例子一样?
答案 0 :(得分:1)
你想要depth first search。目前您正在执行breadth first search。
我不知道Objective-C,但看起来你正在使用NSMutableArray as a queue。将它用作非递归深度优先搜索的堆栈。