Построение дерева с отношениями родитель-потомок с использованием c # рекурсивно

У меня есть список, который я хочу преобразовать в древовидную структуру. Как я могу преобразовать это в древовидную структуру?

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

internal class Program
{
        private static void Main(string[] args)
        {
            List<node> nodeList = new List<node>();
            node n = new node("A", "A1", null, 1); nodeList.Add(n);
            n = new node("B", "A2", "A1", 2); nodeList.Add(n);
            n = new node("C", "A3", "A1", 2); nodeList.Add(n);
            n = new node("D", "A4", "A1", 2); nodeList.Add(n);

            n = new node("E", "A5", "A2", 3); nodeList.Add(n);
            n = new node("F", "A6", "A5", 4); nodeList.Add(n);
            n = new node("G", "A7", "A3", 3); nodeList.Add(n);
            n = new node("H", "A8", "A4", 3); nodeList.Add(n);
            n = new node("I", "A9", "A4", 3); nodeList.Add(n);
            n = new node("J", "A10", "A4", 3); nodeList.Add(n);
            n = new node("K", "A11", "A10", 4); nodeList.Add(n);
            n = new node("L", "A12", "A10", 4); nodeList.Add(n);
            n = new node("M", "A13", "A12", 5); nodeList.Add(n);
            n = new node("N", "A14", "A12", 5); nodeList.Add(n);
            n = new node("O", "A15", "A10", 4); nodeList.Add(n);

            n = new node("P", "A16", null, 1); nodeList.Add(n);
            n = new node("Q", "A17", "A16", 2); nodeList.Add(n);
        }
}

public class node
{
        public string name { get; set; }
        public string key { get; set; }
        public string parentKey { get; set; } 
        public int level { get; set; }

        public List<node> Children { get; set; }

        public node(string Name, string Key, string PK, int Level)
        {
            name = Name;
            key = Key;
            parentKey = PK;
            level = Level;
        }
}

Ответы на вопрос(1)

Ваш ответ на вопрос