深さ優先検索を実行して、ツリーを反復処理するこのコードがあります。すべての要素が 1 回だけ処理されます。とても良い。
-(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];
}
}
BUT: グラフの現在の深さを追跡するにはどうすればよいですか? 深さのレベルを知る必要があります。たとえば、次のノードがあります。
A には子 B、J がいます。B には子 C があります。C には子 D があります。D には子 E、F、I があります。
A が深さレベル 1 の場合、B は 2、C は 3 です。
再帰を使用すると、現在の深度レベルを追跡するのが非常に簡単になりました。自分自身を呼び出す前に変数をインクリメントし、自分自身を呼び出した後にデクリメントします。
しかし、ここでは、この空想的な while ループを使用することはできません。再帰のようにボックス内のボックス内にボックスはありません。
プロパティ (またはインスタンス変数) を TreeNode オブジェクトに追加する必要はありません。これは、あらゆる種類のオブジェクト グラフに対して一般的な方法で再利用できるはずだからです。
これを行う方法を知っている人はいますか?訪問したノードを追跡するために別の配列を導入する必要がありますか?