Saya mencari algoritma yang paling efisien untuk mengambil pohon (disimpan sebagai daftar tepi; ATAU sebagai daftar pemetaan dari simpul induk ke daftar simpul anak); dan menghasilkan, untuk SETIAP simpul, daftar semua node turun darinya (tingkat daun dan tingkat non-daun).
Implementasinya harus melalui loop bukan dari resusi, karena skala; dan idealnya adalah O (N).
Pertanyaan SO ini mencakup solusi standar yang cukup jelas untuk menemukan jawaban untuk SATU simpul di pohon. Tetapi jelas, mengulangi bahwa algoritma pada setiap simpul pohon sangat tidak efisien (dari atas kepala saya, O (NlogN) ke O (N ^ 2)).
Akar pohon dikenal. Pohon itu benar-benar bentuk sewenang-wenang (misalnya bukan N-nary, tidak seimbang dengan cara apa pun, bentuk atau bentuk, bukan kedalaman seragam) - beberapa node memiliki 1-2 anak, beberapa memiliki 30K anak.
Pada level praktis (walaupun seharusnya tidak mempengaruhi algoritma) pohon memiliki ~ 100K-200K node.