Bevor ich mich intensiver mit dem Code beschäftige, warum fügst du die Liste dem Knoten zu? Normal wär, andersherum.
Die Knoten (vom Typ Node) der ersten Schicht des Baums werden einer Liste (vom Typ NodeArray) hinzugefügt. Alle ihnen untergeordnete Knoten werden dem jeweiligen Knoten hinzugefügt.
Nun soll jeder beliebige Knoten im Baum die Instanz vom NodeArray (die Liste, die die Knoten der ersten Schicht enthält) kennen, da diese "besondere" Funktionen bereitstellt, z. B. ist im NodeArray abgespeichert, welcher Knoten gerade ausgewählt ist (nicht im obigen Quelltext enthalten).