Ich habe einen ungerichteten Baum, dessen Eckpunkte ich beschriften möchte. Die Blattknoten sollten mit einem gekennzeichnet sein. Dann nehmen wir an, die Blätter wurden entfernt. In dem verbleibenden Baum sollten die Blätter mit zwei gekennzeichnet sein. Dieser Vorgang wird auf offensichtliche Weise fortgesetzt, bis alle Scheitelpunkte eine Beschriftung haben. Der Grund, warum ich das tue, ist, dass ich die Eckpunkte in einer Warteschlange speichern und sie "zuerst verlassen" möchte. Gibt es eine einfache Möglichkeit, diese -Zeit durchzuführen?
Ich kann das Problem lösen, indem ich bei jedem Schritt ein BFS durchführe. Aber im schlimmsten Fall entferne ich bei jedem Schritt durch jeden Scheitelpunkt genau zwei Blätter und reihe sie ein. Ich glaube, das braucht quadratische Zeit.
Eine andere Idee war, zuerst alle Blätter zu finden und dann von jedem Blatt ein BFS durchzuführen. Das gibt mir nicht die gewünschte Lösung. Betrachten Sie beispielsweise eine Art "Kronendiagramm" wie in der folgenden Abbildung. Die gewünschte Lösung wird angezeigt. Wenn Sie jedoch ein BFS von jedem Blatt starten, werden nur zwei Etiketten verwendet.
Idealerweise wäre der lineare Zeitalgorithmus auch leicht zu erklären und zu implementieren.
quelle
Eine einfache Antwort lautet wie folgt:
Topologisch sortieren Sie das Diagramm.
quelle