fromの入力からバイナリツリーのすべてのエッジを取得しています
parentId childId
e.g. 0 3 // means from node 0 to node 3
// 0 does not mean root of the tree.
これからツリーを構築するにはどうすればよいですか?
fromの入力からバイナリツリーのすべてのエッジを取得しています
parentId childId
e.g. 0 3 // means from node 0 to node 3
// 0 does not mean root of the tree.
これからツリーを構築するにはどうすればよいですか?
これを行う1つの方法は、2つのパスでこれを行うことです。
すべてのリンクを組み立てるには、各ノードのID(または、IDがすべて0〜Nの範囲にあることがわかっている場合は適切なサイズの巨大な配列)でキー設定されたハッシュテーブルを作成することから始めることができます。 Nの)。ファイルから1行を読み取るときはいつでも、次のことを実行できます。
ツリーのルートを見つけるために、ルートノードの候補となるノードのセットを作成できます。これは、最初はツリー内のすべてのノードです。次に、これまでに構築したノード間で反復処理できます。ノードvが別のノードuの子であることがわかるたびに、候補ルートのセットからノードvを削除できます(子であるため)。完了すると、すべての可能なルートのセットが残ります。エッジのリストが実際に二分木を定義している場合、これは1つのノードになります。二分木のフォレストを定義する場合、これにより、フォレスト内のすべてのツリーのルートが返されます。
全体として、これにはO(n)時間がかかります。ここで、nはエッジの数です(バイナリツリーのエッジの数はノードの数から1を引いたものであるため、ツリーのノードの数でもあります)。
必要に応じて、これら2つのパスを1つのパスにまとめることができます。プレゼンテーションを簡単にするために、これらを個別に説明しました。
お役に立てれば!
最初にノードID
のマップを作成し、接続されているノードのリストを作成してから、マップを反復処理して、マップ内の情報からfrom、toへのリンクを作成します。
それが二分木である場合、ファイルに不足している情報があり、形式である必要があります
parent、leftChild、rightChild、
またはleftとrightは常に同じ順序(左が最初)で、ノードごとに2つの行があり、2番目は次の行にあります。