2012-03-15 3 views
1

У меня есть дерево, которое заполнено объектами Node. Каждый узел имеет ArrayList, который хранит свои дочерние узлы, так как может быть неопределенное количество детей, в отличие от двоичного дерева.Как найти дерево для определенного класса узлов

Как я могу пройти дерево, чтобы найти определенный узел, если каждый узел имеет число детей, где каждый ребенок имеет своих собственных детей по очереди и т. Д. Я просто ищу общий способ сделать это итеративно, например, используя функцию, которая выполняет поиск по массиву nodeList узла (сохранение дочерних элементов), а также списки последующих дочерних элементов каждого дочернего элемента.

Любые предложения?

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

Никакой пользы на самом деле, я просто никогда не понимал рекурсии хе-хе. – Palindrome

Смежные вопросы