2012-03-15 20 views
1

私はNodeオブジェクトによって設定されたツリーを持っています。各ノードには、バイナリツリーとは異なり、指定されていない量の子が存在する可能性があるため、その子ノードを格納するArrayListがあります。特定のノードクラスのツリーを検索する方法

各ノードに多数の子がある場合、各子がそれぞれ独自の子を持つなど、特定のノードを見つけるためにツリーをトラバースする方法はありますか。私は、これを繰り返し行う一般的な方法を探しています。例えば、ノードのarrayList(子を格納する)を検索する関数や、各子の子ノードの配列リストを検索する関数を使用します。

提案がありますか?

UPDATE

これは私がこれまで試したものです:

return 
(
    (StrangeNode)current.ChildrenList 
     .SingleOrDefault(c => 
      c.GetType().Name.ToString().Equals("StrangeNode")) 
).myArrayList; 
+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/これはあなたの宿題をするためにSOを得る試みのように聞こえますか? –

+0

実際に宿題ではなく、ツリーの特定のポイント(つまり別のクラス)に特別なタイプのノードを持つツリーを実装しようとしています。 – Palindrome

+0

文字通り、何を試したのですか? –

答えて

0

反復的にあなたがこのような何かを行うことができます:

List<Node> nodes = new List<Node>(); 
nodes.add(rootnode) 

for (int i=0; i < nodes.count; i++) 
{ 

Node currentNode = nodes[i]; 

//do the processing to check here 

nodes.add(currentNode.children) //not 100% sure how to do this, but you get the idea 

} 

あなたはそれがrecursilyそのわずか深さ優先、非常に簡単に行う場合。

+0

私はこれを完全に理解していませんでした。あなたが言っていることは、すべての子を配列に追加し、その配列を '奇妙な'ノードとして検索することです。 – Palindrome

+0

それはそれです。現在のノードをチェックすると、子を配列に移動します。次に、次のノードをチェックし、それらの子も配列に入れます。結局あなたはすべての子供たちを通ってきたでしょう。 – Haedrian

+0

しかし、これはどのように子供たちの世話をしますか? – Palindrome

0

二つの最も明白な方法は深さ優先探索と幅優先探索しています。両方の例は、アルゴリズムのテキストブックやオンラインで検索して見つけることができます。この深さの最初の検索は、3〜10行のコードで再帰的に実装できます。

+0

私はこれまでに試したことで私の質問を更新しました。再帰的にではなく、可能であればこれを繰り返し実行したいと思います。 – Palindrome

+0

繰り返し実行するとどのようなメリットがありますか? – tster

+0

本当に利点はありません、私はちょうど再帰hehe把握したことはありません。 – Palindrome

関連する問題