У меня есть список объектов с идентификатором свойства и parent_id.
Я хочу создать дерево для соединения тех дочерних элементов и родителей.
1 родитель может иметь несколько детей и существует объект, который будет предком всех объектов.
Что самый быстрый алгоритм должен реализовать это?
Я использую C# в качестве языка программирования, но другие языки также хорошо.
Что-то вроде этого должно помочь:
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 для корневые узлы)
Вы можете использовать словарь:
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]);
}