頂点にラベルを付けたい無向ツリーがあります。リーフノードには1つのラベルを付ける必要があります。次に、葉が取り除かれたと仮定します。残っているツリーでは、葉に2つのラベルを付ける必要があります。このプロセスは、すべての頂点にラベルが付くまで明白な方法で続きます。これを行う理由は、頂点をキューに保存し、それらを「最初に残す」ことです。この時間を実行する簡単な方法はありますか?
すべてのステップでBFSを実行することで問題を解決できます。しかし最悪の場合、すべてのステップですべての頂点を通過し、ちょうど2つのリーフを削除してキューに入れます。これには二次時間がかかると思います。
別のアイデアは、最初にすべての葉を見つけ、次にすべての葉からBFSを実行することでした。これは私に望ましい解決策を与えません。たとえば、次の図のような「クラウングラフ」の種類を考えます。目的のソリューションが示されていますが、各リーフからBFSを起動すると、2つのラベルのみが使用されます。
理想的には、線形時間アルゴリズムの説明と実装も簡単です。