我有一个存储过程,它返回按树组织的名称的平面列表。为了传达谁是有深度值的父级,因此 5 条记录(最多 3 级)的结果如下所示:
Depth|Name
----------
0|Ford
1|Compact Cars
2|Pinto
1|Trucks
2|H-Series
我试图通过读取深度值从这个数组中构造一个树。有没有一些明显的算法可以从这样的数据序列中构造一棵树?我添加了 C# 标记,因为我对 LINQy 解决方案持开放态度,尽管通用的计算机科学答案会非常有帮助。
这是我目前的尝试:
class Record
{
public string Name{ get; set; }
public List<Record> children { get; set; }
}
var previousLevel = 0;
var records = new List<Record>();
foreach (var thing in TreeFactory.fetch(dao))
{
if(this.Depth == 0) {
//Root node
} else if(thing.Depth > previousLevel) {
//A Child of the last added node
} else if(thing.Depth < previousLevel) {
//A Cousin of the last added node
} else {
//A Sibling of the of the last added node
}
previousLevel = this.Depth;
}
我所说的“高效”是指列表大小最多为 200,000 个元素,树最多可扩展到 100 个级别,所以实际上我只是在寻找更容易推理的东西。