Szukam najbardziej wydajnego algorytmu do pobrania drzewa (przechowywanego jako lista krawędzi; LUB jako lista odwzorowań z węzła nadrzędnego na listę węzłów podrzędnych); i stworzyć dla KAŻDEGO węzła listę wszystkich węzłów z niego pochodzących (poziom liścia i poziom nie-liści).
Wdrożenie musi odbywać się za pomocą pętli zamiast recusion, ze względu na skalę; i idealnie powinien być O (N).
To pytanie SO obejmuje standardowe, dość oczywiste rozwiązanie, aby znaleźć odpowiedź na JEDEN węzeł w drzewie. Ale oczywiście powtarzanie tego algorytmu na każdym węźle drzewa jest wysoce nieefektywne (z góry mojej głowy, od O (NlogN) do O (N ^ 2)).
Korzeń drzewa jest znany. Drzewo ma absolutnie dowolny kształt (np. Nie jest N-nary, nie jest w żaden sposób zbalansowany, ma kształt lub formę, nie ma jednolitej głębokości) - niektóre węzły mają 1-2 dzieci, niektóre mają 30K dzieci.
Na poziomie praktycznym (choć nie powinno to wpływać na algorytm) drzewo ma ~ 100–200 000 węzłów.