ホームページ >バックエンド開発 >PHPチュートリアル >バイナリー ツリー II のいとこ
2641。バイナリー ツリー II のいとこ
難易度: 中
トピック: ハッシュ テーブル、ツリー、深さ優先検索、幅優先検索、バイナリ ツリー
バイナリ ツリーのルートを指定すると、ツリー内の各ノードの値を すべてのいとこの値の合計 に置き換えます。
バイナリ ツリーの 2 つのノードは、異なる親を持つ同じ深さを持つ場合、いとことなります。
変更されたツリーのルートを返します。
ノードの深さは、ルート ノードからノードまでのパス内のエッジの数であることに注意してください。
例 1:
例 2:
制約:
ヒント:
解決策:
このソリューションでは、深さ優先検索 (DFS) アプローチを 2 回使用します。このソリューションを PHP で実装してみましょう: 2641。バイナリー ツリー II のいとこ
<?php // Definition for a binary tree node. class TreeNode { public $val = null; public $left = null; public $right = null; public function __construct($val = 0, $left = null, $right = null) { $this->val = $val; $this->left = $left; $this->right = $right; } } class Solution { /** * @param TreeNode $root * @return TreeNode */ public function replaceValueInTree($root) { ... ... ... /** * go to ./solution.php */ } /** * DFS to calculate the sum of node values at each level. * @param $root - current node * @param $level - current depth level in the tree * @param $levelSums - array holding the sum of values at each level * @return void */ private function dfs($root, $level, &$levelSums) { ... ... ... /** * go to ./solution.php */ } /** * DFS to replace the node values with the sum of cousins' values. * @param $root - current node in the original tree * @param $level - current depth level in the tree * @param $curr - node being modified in the new tree * @param $levelSums - array holding the sum of values at each level * @return mixed */ private function replace($root, $level, $curr, $levelSums) { ... ... ... /** * go to ./solution.php */ } } // Helper function to print the tree (for testing purpose) function printTree($root) { if ($root === null) return []; $result = []; $queue = [$root]; while (!empty($queue)) { $node = array_shift($queue); if ($node !== null) { $result[] = $node->val; $queue[] = $node->left; $queue[] = $node->right; } else { $result[] = null; } } // Remove trailing null values for clean output while (end($result) === null) { array_pop($result); } return $result; } // Example usage: // Tree: [5,4,9,1,10,null,7] $root = new TreeNode(5); $root->left = new TreeNode(4); $root->right = new TreeNode(9); $root->left->left = new TreeNode(1); $root->left->right = new TreeNode(10); $root->right->right = new TreeNode(7); $solution = new Solution(); $modifiedTree = $solution->replaceValueInTree($root); print_r(printTree($modifiedTree)); // Output: [0, 0, 0, 7, 7, null, 11] ?>
パラメータ:
基本ケース: ノードが null の場合、戻ります。
現在のレベルの合計が初期化されていない場合 (つまり、レベルが配列に存在しない場合)、それを 0 に初期化します。
現在のノードの値をそのレベルの合計に加算します。
左と右の子に対して dfs を再帰的に呼び出し、レベルを 1 ずつ増やします。
パラメータ:
いとこの値の合計を計算します:
左の子が存在する場合は、いとこの合計を使用して新しい TreeNode を作成し、それに対して replace を再帰的に呼び出します。
正しい子が存在する場合は、正しい子に対して同じことを行います。
プロンプトの最初の例を使用してみましょう:
root = [5,4,9,1,10,null,7]
最初の DFS (レベル合計の計算):
2 番目の DFS (値の置換):
<?php // Definition for a binary tree node. class TreeNode { public $val = null; public $left = null; public $right = null; public function __construct($val = 0, $left = null, $right = null) { $this->val = $val; $this->left = $left; $this->right = $right; } } class Solution { /** * @param TreeNode $root * @return TreeNode */ public function replaceValueInTree($root) { ... ... ... /** * go to ./solution.php */ } /** * DFS to calculate the sum of node values at each level. * @param $root - current node * @param $level - current depth level in the tree * @param $levelSums - array holding the sum of values at each level * @return void */ private function dfs($root, $level, &$levelSums) { ... ... ... /** * go to ./solution.php */ } /** * DFS to replace the node values with the sum of cousins' values. * @param $root - current node in the original tree * @param $level - current depth level in the tree * @param $curr - node being modified in the new tree * @param $levelSums - array holding the sum of values at each level * @return mixed */ private function replace($root, $level, $curr, $levelSums) { ... ... ... /** * go to ./solution.php */ } } // Helper function to print the tree (for testing purpose) function printTree($root) { if ($root === null) return []; $result = []; $queue = [$root]; while (!empty($queue)) { $node = array_shift($queue); if ($node !== null) { $result[] = $node->val; $queue[] = $node->left; $queue[] = $node->right; } else { $result[] = null; } } // Remove trailing null values for clean output while (end($result) === null) { array_pop($result); } return $result; } // Example usage: // Tree: [5,4,9,1,10,null,7] $root = new TreeNode(5); $root->left = new TreeNode(4); $root->right = new TreeNode(9); $root->left->left = new TreeNode(1); $root->left->right = new TreeNode(10); $root->right->right = new TreeNode(7); $solution = new Solution(); $modifiedTree = $solution->replaceValueInTree($root); print_r(printTree($modifiedTree)); // Output: [0, 0, 0, 7, 7, null, 11] ?>
いとこ値に基づくこの段階的な置換により、例に示すように変更されたツリーが生成されます。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がバイナリー ツリー II のいとこの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。