Перемещение дерева объектов в С#
У меня есть дерево, которое состоит из нескольких объектов, где у каждого объекта есть имя (string
), id (int
) и, возможно, массив дочерних элементов того же типа. Как пройти через все дерево и распечатать все идентификаторы и имена?
Я новичок в программировании и, честно говоря, у меня возникают проблемы, когда я обдумываю это, потому что я не знаю, сколько существует уровней. Прямо сейчас я использую цикл foreach
для извлечения родительских объектов непосредственно под корнем, но это означает, что я не могу получить дочерние объекты.
Ответы
Ответ 1
Алгоритм, который использует рекурсию, выглядит следующим образом:
printNode(Node node)
{
printTitle(node.title)
foreach (Node child in node.children)
{
printNode(child); //<-- recursive
}
}
Здесь приведена версия, которая также отслеживает, насколько глубоко вложен рекурсия (т.е. печатаем ли мы детей из корня, внуков, правнуков и т.д.):
printRoot(Node node)
{
printNode(node, 0);
}
printNode(Node node, int level)
{
printTitle(node.title)
foreach (Node child in node.children)
{
printNode(child, level + 1); //<-- recursive
}
}
Ответ 2
Ну, вы всегда можете использовать рекурсию, но в сценарии "реального мира" это может привести к плохим вещам, если вы не отслеживаете глубину.
Здесь пример, используемый для двоичного дерева: http://www.codeproject.com/KB/recipes/BinarySearchTree.aspx
Я бы связал списки google и другие древовидные структуры, если вы новичок во всей структуре данных. Там будет много знаний.