Heim >Backend-Entwicklung >PHP-Tutorial >Mindestanzahl von Operationen zum Sortieren eines Binärbaums nach Ebene
2471. Mindestanzahl von Operationen zum Sortieren eines Binärbaums nach Ebene
Schwierigkeit:Mittel
Themen: Baum, Breitensuche, Binärbaum
Sie erhalten die Wurzel eines Binärbaums mit einzigartigen Werten.
In einem Vorgang können Sie zwei beliebige Knoten auf derselben Ebene auswählen und ihre Werte austauschen.
Gib die Mindestanzahl an Operationen zurück, die erforderlich sind, um die Werte auf jeder Ebene in einer streng aufsteigenden Reihenfolge zu sortieren.
Die Ebene eines Knotens ist die Anzahl der Kanten entlang des Pfades zwischen ihm und dem Wurzelknoten.
Beispiel 1:
Beispiel 2:
Beispiel 3:
Einschränkungen:
Hinweis:
Lösung:
Das Problem besteht darin, die Werte eines Binärbaums Ebene für Ebene in streng aufsteigender Reihenfolge mit der minimalen Anzahl von Operationen zu sortieren. In jeder Operation können wir die Werte zweier Knoten vertauschen, die sich auf derselben Ebene befinden. Das Ziel besteht darin, die Mindestanzahl solcher Operationen zu bestimmen, die erforderlich sind, um die sortierte Reihenfolge zu erreichen.
Lassen Sie uns diese Lösung in PHP implementieren: 2471. Mindestanzahl von Operationen zum Sortieren eines Binärbaums nach Ebene
<?php /** * @param TreeNode $root * @return Integer */ function minimumOperations($root) { ... ... ... /** * go to ./solution.php */ } /** * Function to calculate minimum swaps to sort an array * * @param $arr * @return int */ function minSwapsToSort($arr) { ... ... ... /** * go to ./solution.php */ } ?> <h3> Erläuterung: </h3> <ol> <li> <p><strong>Schritt 1: Führen Sie BFS durch, um Knoten nach Ebene zu gruppieren</strong>:</p> <ul> <li>Beginnen Sie an der Wurzel und durchqueren Sie den Baum Ebene für Ebene.</li> <li>Hängen Sie für jeden Knoten seinen Wert an die entsprechende Ebene im Ebenen-Array an.</li> </ul> </li> <li> <p><strong>Schritt 2: Berechnen Sie für jede Ebene die minimalen Swaps, um die Werte zu sortieren</strong>:</p> <ul> <li>Sortieren Sie die Werte auf jeder Ebene.</li> <li>Verwenden Sie einen zyklusbasierten Ansatz, um die minimalen Swaps zu berechnen, die erforderlich sind, um die aktuelle Ebene in eine sortierte Ebene umzuwandeln.</li> </ul> </li> <li> <p><strong>Zykluszerlegung</strong>:</p> <ul> <li>Verfolgen Sie für jedes unsortierte Element seinen Zyklus (d. h. wohin es gehen soll) und markieren Sie Elemente als besucht.</li> <li>Für jeden Zyklus entspricht die Anzahl der erforderlichen Swaps der Länge des Zyklus minus eins.</li> </ul> </li> <li> <p><strong>Geben Sie die Gesamtzahl der Swaps zurück</strong>:</p> <ul> <li>Summieren Sie die für jedes Level erforderlichen Swaps und geben Sie die Summe zurück.</li> </ul> </li> </ol> <h3> Beispielhafte Vorgehensweise: </h3> <h4> Beispiel 1: </h4> <p>Eingabebaum:<br> </p> <pre class="brush:php;toolbar:false"><?php /** * @param TreeNode $root * @return Integer */ function minimumOperations($root) { ... ... ... /** * go to ./solution.php */ } /** * Function to calculate minimum swaps to sort an array * * @param $arr * @return int */ function minSwapsToSort($arr) { ... ... ... /** * go to ./solution.php */ } ?>
Stufen:
Stufe 1: [4, 3]
Stufe 2: [7, 6, 8, 5]
Stufe 3: [9, 10]
Gesamt-Swaps = 1 (Level 1) 2 (Level 2) = 3 Swaps.
Ausgabe: 3
Eingabebaum:
1 / \ 4 3 / \ / \ 7 6 8 5 \ 9 \ 10
Stufen:
Stufe 1: [3, 2]
Stufe 2: [7, 6, 5, 4]
Gesamt-Swaps = 1 (Level 1) 2 (Level 2) = 3 Swaps.
Ausgabe: 3
Daher beträgt die Gesamtzeitkomplexität O(N log N), was angesichts der Einschränkungen effizient genug ist.
Für den Eingabebaum:
<?php /** * @param TreeNode $root * @return Integer */ function minimumOperations($root) { ... ... ... /** * go to ./solution.php */ } /** * Function to calculate minimum swaps to sort an array * * @param $arr * @return int */ function minSwapsToSort($arr) { ... ... ... /** * go to ./solution.php */ } ?>
Die Ausgabe beträgt 3 Swaps, wie im Beispiel beschrieben.
Diese Lösung berechnet effizient die Mindestanzahl von Swaps, die zum Sortieren jeder Ebene des Binärbaums erforderlich sind, indem BFS verwendet wird, um Knoten nach Ebene zu gruppieren und die Zerlegung zu durchlaufen, um die Anzahl der Swaps zu minimieren. Die zeitliche Komplexität von O(N log N) ist optimal für den Umgang mit Bäumen mit bis zu 10^5 Knoten.
Kontaktlinks
Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, dem Repository einen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Ihre Unterstützung würde mir sehr viel bedeuten!
Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:
Das obige ist der detaillierte Inhalt vonMindestanzahl von Operationen zum Sortieren eines Binärbaums nach Ebene. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!