Должно ли дерево иметь только один корневой узел
Я хочу отобразить древовидную структуру. Мне действительно нужно дать пользователю / дереву предопределенный жестко запрограммированный корневой узел, такой как "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()
}
Увидеть! Красиво и чисто.