Пересечение дерева объектов в c#

У меня есть дерево, которое состоит из нескольких объектов, где каждый объект имеет имя (string), идентификатор (int) и возможно массив детей, которые имеют тот же тип. Как я прохожу все дерево и распечатываю все идентификаторы и имена?

Я плохо знаком с программированием, и откровенно говоря, я испытываю затруднения при обертывании моей головы вокруг этого, потому что я не знаю, сколько там уровни. Прямо сейчас я использую a foreach цикл для выборки родительских объектов непосредственно ниже корня но это означает, что я не могу получить детей.

19
задан Bondolin 11 July 2019 в 12:50
поделиться

2 ответа

Алгоритм, который использует рекурсию, идет как это:

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
  }
}
46
ответ дан 30 November 2019 в 02:52
поделиться

Ну, Вы могли всегда использовать рекурсию, но в сценарии программирования "реального мира", она может привести к плохим вещам, если Вы не отслеживаете глубину.

Вот пример, используемый для двоичного дерева: http://www.codeproject.com/KB/recipes/BinarySearchTree.aspx

я погуглил бы связанные списки и другие древовидные структуры, если Вы плохо знакомы с целой вещью структуры данных. Существует богатство знания, которое будет иметься.

0
ответ дан 30 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: