我有這個代碼遍歷樹,進行深度優先搜索。每個元素都只處理一次。很好。如何跟蹤此對象圖深度優先搜索算法的深度?
-(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