Как искать дерево для определенного класса узла - PullRequest
1 голос
/ 15 марта 2012

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

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

Есть предложения?

ОБНОВЛЕНИЕ

Это то, что я пробовал до сих пор:

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

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Итеративно вы можете сделать что-то вроде этого:

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

}

Если вы хотите, чтобы это делалось рекурсивно, это просто на глубину, очень просто.

0 голосов
/ 15 марта 2012

Два наиболее очевидных способа - это поиск в глубину и поиск в ширину. Вы можете найти примеры как в любом учебнике алгоритмов или онлайн, ища это. Вы можете реализовать эту глубину поиска сначала в 3-10 строках кода.

...