如何从字典中显示的树中获取每个节点的级别?

时间:2011-06-22 13:08:02

标签: c# linq dictionary tree

我在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>

2 个答案:

答案 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);

您需要填写树稍微不同(请参阅链接中的信息)