ホームページ >バックエンド開発 >PHPチュートリアル >バイナリ ツリーをレベル別にソートするための最小操作数
2471。バイナリ ツリーをレベル別にソートするための最小操作数
難易度: 中
トピック: ツリー、幅優先検索、バイナリ ツリー
一意の値を持つバイナリ ツリーのルートが与えられます。
1 回の操作で、同じレベルにある任意の 2 つのノードを選択し、それらの値を交換できます。
各レベルの値を厳密に増加する順序でソートするために必要な操作の最小数を返します。
ノードのレベルは、ノードとルート ノード間のパスに沿ったエッジの数です。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
問題は、最小限の操作でバイナリ ツリーの値をレベルごとに厳密に昇順に並べ替えることです。各操作で、同じレベルにある 2 つのノードの値を交換できます。目標は、並べ替え順序を達成するために必要なこのような操作の最小数を決定することです。
このソリューションを PHP で実装してみましょう: 2471。バイナリ ツリーをレベル別にソートするための最小操作数
<?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 */ } ?>
ステップ 1: BFS を実行してノードをレベルごとにグループ化します:
ステップ 2: レベルごとに、値を並べ替えるための最小スワップを計算します:
サイクル分解:
スワップの合計数を返します:
入力ツリー:
<?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 */ } ?>
レベル:
レベル 1: [4, 3]
レベル 2: [7, 6, 8, 5]
レベル 3: [9, 10]
合計スワップ = 1 (レベル 1) 2 (レベル 2) = 3 スワップ。
出力: 3
入力ツリー:
1 / \ 4 3 / \ / \ 7 6 8 5 \ 9 \ 10
レベル:
レベル 1: [3, 2]
レベル 2: [7, 6, 5, 4]
合計スワップ = 1 (レベル 1) 2 (レベル 2) = 3 スワップ。
出力: 3
したがって、全体的な時間計算量は O(N log N) となり、制約を考慮すると十分効率的です。
入力ツリーの場合:
<?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 */ } ?>
例で詳しく説明されているように、出力は 3 つのスワップです。
このソリューションは、BFS を使用してレベルごとにノードをグループ化し、スワップ数を最小限に抑えるサイクル分解により、バイナリ ツリーの各レベルを並べ替えるのに必要な最小スワップ数を効率的に計算します。 O(N log N) の時間計算量は、最大 10^5 ノードを持つツリーを処理するのに最適です。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がバイナリ ツリーをレベル別にソートするための最小操作数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。