2012-03-15 5 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/ 이렇게하면 숙제 할 때 얻는 시도처럼 들리십니까? –

+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

관련 문제