Создание дерева с помощью списка объектов

У меня есть список объектов с идентификатором свойства и parent_id.
Я хочу создать дерево для соединения тех дочерних элементов и родителей.
1 родитель может иметь несколько детей и существует объект, который будет предком всех объектов.

Что самый быстрый алгоритм должен реализовать это?
Я использую C# в качестве языка программирования, но другие языки также хорошо.

5
задан Billy 4 March 2010 в 10:15
поделиться

2 ответа

Что-то вроде этого должно помочь:

public List<Node> MakeTreeFromFlatList(IEnumerable<Node> flatList)
{
    var dic = flatList.ToDictionary(n => n.Id, n => n);
    var rootNodes = new List<Node>();
    foreach(var node in flatList)
    {
        if (node.ParentId.HasValue)
        {
            Node parent = dic[node.ParentId.Value];
            node.Parent = parent;
            parent.Children.Add(node);
        }
        else
        {
            rootNodes.Add(node);
        }
    }
    return rootNodes;
}

(при условии, что ParentId имеет значение Nullable , и имеет значение null для корневые узлы)

4
ответ дан 14 December 2019 в 04:36
поделиться

Вы можете использовать словарь:

var dict = new Dictionary<Id, Node>();

foreach (var item in items)
{
    dict[item.Id] = new Node(item);
}

foreach (var item in items)
{
    dict[item.ParentId].AddChild(dict[item.Id]);
}
3
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

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