Construindo uma árvore com relacionamento filho pai usando c # recursivamente

Eu tenho uma lista que eu quero converter em estrutura de árvore. Como posso converter isso em estrutura de árvore?

Eu olhei emConstruir lista de tipos de árvores verificando recursivamente a relação pai-filho C # thread mas como a chave na minha classe é string, não posso usar essa solução. Por favor ajude

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;
        }
}

questionAnswers(1)

yourAnswerToTheQuestion