Перемещение дерева объектов в С#

У меня есть дерево, которое состоит из нескольких объектов, где у каждого объекта есть имя (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 и другие древовидные структуры, если вы новичок во всей структуре данных. Там будет много знаний.