트리를 가져 오는 가장 효율적인 알고리즘을 찾고 있습니다 (가장자리 목록으로 저장되거나 부모 노드에서 자식 노드 목록으로 매핑 목록으로 저장 됨). 모든 노드에 대해 그 노드의 하위 노드 (리프 레벨 및 비 리프 레벨)의 목록을 생성합니다.
스케일로 인해 구현은 recusion 대신 루프를 거쳐야합니다. 이상적으로 O (N)이어야합니다.
이 SO 질문 은 트리에서 하나의 노드에 대한 답변을 찾기 위해 합리적으로 명확한 표준 솔루션을 다룹니다. 그러나 분명히 모든 트리 노드에서 해당 알고리즘을 반복하는 것은 매우 비효율적입니다 (제 머리 꼭대기에서 O (NlogN) ~ O (N ^ 2)).
나무 뿌리가 알려져 있습니다. 나무는 절대적으로 임의의 모양입니다 (예 : N-nary가 아니고 어떤 식 으로든 균형을 잡지 않고 모양이 균일하지 않습니다)-일부 노드에는 1-2 명의 자녀가 있고 일부에는 30K 명의 자녀가 있습니다.
실용적인 수준에서 (알고리즘에는 영향을 미치지는 않지만) 트리에는 ~ 100K-200K 노드가 있습니다.