Должно ли дерево иметь только один корневой узел

Я хочу отобразить древовидную структуру. Мне действительно нужно дать пользователю / дереву предопределенный жестко запрограммированный корневой узел, такой как "RootUnit", куда он может добавить своих детей или потомков?

Имеет ли это смысл или вызывает проблемы только при добавлении узлов?

5 ответов

Если у вас есть два корня, то у вас есть два дерева.

У дерева должен быть только один корень. Но вам не нужно жестко кодировать рут. Просто обработайте первый созданный узел дерева как корень.

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

Это зависит от контекста. Из строгого математического определения вы не можете иметь несколько корневых узлов в дереве. Однако есть некоторые реализации деревьев, которые игнорируют это и в любом случае имеют несколько узлов верхнего уровня (например, TreeView контролировать, вы пометили этот вопрос). Вам просто нужно спросить себя, будет ли ваша конкретная программа лучше или хуже с несколькими узлами верхнего уровня. Учитывая, что мы ничего не знаем о вашей программе, это не решение, которое мы действительно можем принять для вас.

Вместо того, чтобы использовать один и тот же конструктор для каждого узла, предоставьте конструктор по умолчанию, используемый для корневого узла, и один для всего остального. Это не безобразно, и это работает.

public Node()
{
  // Set properties if you'd like.
  // such as having no children yet or whatnot.
}

public Node(Node parent)
{
  // Similar to Node()
}

Увидеть! Красиво и чисто.

Другие вопросы по тегам