ツリー(エッジのリスト、または親ノードから子ノードのリストへのマッピングのリストのいずれかとして格納)を取得するための最も効率的なアルゴリズムを探しています。すべてのノードについて、そのノードの子孫であるすべてのノードのリスト(リーフレベルと非リーフレベル)を生成します。
規模の関係上、実装は反省ではなくループを介して行う必要があります。理想的にはO(N)である必要があります。
このSOの質問は、ツリー内の1つのノードの答えを見つけるための標準的な合理的に明白なソリューションをカバーしています。しかし、明らかに、すべてのツリーノードでそのアルゴリズムを繰り返すことは非常に非効率的です(頭上からO(NlogN)からO(N ^ 2)へ)。
ツリーのルートは既知です。ツリーは完全に任意の形状です(例:N-naryではなく、いかなる形でもバランスが取れていない、形状または形式、均一な深さではない)-一部のノードには1〜2個の子があり、一部には30Kの子があります。
実用的なレベルでは(アルゴリズムには影響しないはずですが)、ツリーには100K〜200Kのノードがあります。