Ich suche nach dem effizientesten Algorithmus, um einen Baum zu erstellen (entweder als Liste von Kanten oder als Liste von Zuordnungen vom übergeordneten Knoten zu einer Liste von untergeordneten Knoten gespeichert). und für JEDEN Knoten eine Liste aller von ihm abstammenden Knoten (Blattebene und Nicht-Blattebene) erstellen.
Die Implementierung muss aufgrund der Skalierung über Schleifen statt über Reclusion erfolgen. und sollte idealerweise O (N) sein.
Diese SO-Frage behandelt eine einigermaßen offensichtliche Standardlösung, um die Antwort für EINEN Knoten in einem Baum zu finden. Aber offensichtlich ist es sehr ineffizient, diesen Algorithmus auf jedem Baumknoten zu wiederholen (von oben (O (NlogN) bis O (N ^ 2)).
Die Baumwurzel ist bekannt. Der Baum hat eine absolut willkürliche Form (z. B. nicht N-när, in keiner Weise ausgeglichen, Form oder Gestalt, keine einheitliche Tiefe) - einige Knoten haben 1-2 Kinder, andere 30K Kinder.
Auf praktischer Ebene (obwohl dies den Algorithmus nicht beeinflussen sollte) hat der Baum ~ 100K-200K-Knoten.