我有这个代码遍历树,进行深度优先搜索。每个元素都只处理一次。很好。如何跟踪此对象图深度优先搜索算法的深度?
-(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 removeLastObject];
}
}
但是:我怎样才能保持跟踪在图中的当前深度的?我需要知道深度的级别。因此,例如,我有这些节点:
A具有孩子的B,J. B具有子C. C已子D. d具有孩子的E,F,I
当A是在深度级别1,则B是2并且C是3.
随着递归,很容易跟踪当前深度级别。在调用自己之前只需调用一个变量,并在调用它之后递减它。
但是这里有这个花哨的while循环,这是不可能的。盒子中的盒子没有像递归那样发生。
我真的不想为TreeNode对象添加属性(或实例变量),因为它应该以任何种类的对象图的通用方式重新使用。
有没有人有一个想法如何做到这一点?我必须引入另一个数组来跟踪访问节点吗?
不幸的是我真的需要DFS。无法将其更改为BFS。 – 2011-04-26 10:03:33
我编辑了我的答案,查看更新。 – njlarsson 2011-04-28 09:01:06