非常に珍しい入力からバイナリツリーを構築したいと思います。入力には以下が含まれます。そのエッジ(ノードペア)のリストからバイナリツリーを構築する
ノードの総数。
ルートの整数ラベル。
すべてのエッジのリスト(各 に接続されている頂点/ノード)。リスト内のエッジは未分類です。 の左/右の子を決定するルールは1つのみです。 - 最初にリスト内にある が最初に表示されるエッジの子が左側に表示されます。頂点ペアの子/親の順序もランダムです。
私はいくつかのstraighforwardソリューションを作ってみたけど、彼らは(私は基本的にそれらにラベルされたルートを持っている2つのエッジを見つけて、すべてのためにこのプロセスを繰り返したいすべてのエッジのリストを複数の検索を必要としますサブツリー)
この単純なアプローチはと非常に効率的ですノード数が多いツリーの場合、効率的ではありませんが、他に何も思い付きません。
これを解決するためのより効率的なアルゴリズムのアイデアはありますか?
ここよりよい視覚化のため例だ:
INPUT:5つのノード、エッジのルート、2 LABELED LIST:[(1,0)、(1,2)、(2,3)、 (1,4)]
ツリーは次のようになります。
2
1 3
0 4
このソリューションをご利用いただき、ありがとうございました。これはまさに私が探しているもののように見えます!しかし、あなたはいくつかを明確にすることができますか?どのような辞書を使っていますか?私はキーがそれぞれのノードでなければならないと思いますか?その場合、値は他のノード(それが接続されているノード)か別のノードであるべきですか? –