我在List中演示了一个树数据结构,如下所示:
Dictionary<int, List<int>> // Key, list of children
Data(1) = { 2 } // root
Data(2) = { 3 }
Data(3) = { 4, 5 }
Data(4) = { 5 }
Data(5) = { } // leaf
我想知道你是否可以帮我创建一个项目和级别的字典:
Dictioanry<ItemID, Level>
答案 0 :(得分:0)
不确定这是最好的解决方案,但应该有效:
var data = new Dictionary<int, List<int>>();
data[1] = new List<int> { 2 };
data[2] = new List<int> { 3 };
data[3] = new List<int> { 4, 5 };
data[4] = null;
data[5] = new List<int> { 6, 7 };
data[6] = new List<int> { 8 };
data[7] = null;
data[8] = null;
var allparents = new Dictionary<int, int>(data.Count);
foreach (var node in data) {
if (node.Value != null) {
foreach (var child in node.Value) {
allparents[child] = node.Key;
}
}
}
int root = data.Keys.Except(allparents.Keys).First();
int maxdepth = 1;
foreach (int child in allparents.Keys) {
int depth = 1;
int parent = child;
while (parent != root) {
++depth;
parent = allparents[parent];
}
if (depth > maxdepth) {
maxdepth = depth;
}
}
Console.WriteLine(maxdepth);
答案 1 :(得分:-1)
如果您使用此node class,则可以执行此操作:
nodes.All.ToDictionary(n => n.Value, n => n.Level);
您需要填写树稍微不同(请参阅链接中的信息)