2415。反轉二元樹的奇數層
難度:中
主題:樹、深度優先搜尋、廣度優先搜尋、二元樹
給定一個完美二元樹的根,反轉樹的每個奇數層的節點值。
回傳反轉樹的根。
如果所有父節點都有兩個子節點並且所有葉子都位於同一級別,那麼二叉樹就是完美。
節點的等級是它與根節點之間的路徑上的邊數。
範例1:
範例2:
範例 3:
約束:
提示:
解:
我們需要對二元樹進行深度優先遍歷。任務是反轉奇數層的節點值。完美二元樹意味著所有非葉節點都有兩個子節點,並且所有葉節點都處於同一層級。
我們將使用 DFS(深度優先搜尋)方法,並且在每個奇數層級上,我們將反轉節點值。以下是實現此目的的解決方案。
讓我們用 PHP 實作這個解:2415。反轉二元樹的奇數層
<?php class TreeNode { public $val = 0; 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 reverseOddLevels($root) { ... ... ... /** * go to ./solution.php */ } /** * Helper function to perform DFS * * @param $left * @param $right * @param $isOddLevel * @return void */ private function dfs($left, $right, $isOddLevel) { ... ... ... /** * go to ./solution.php */ } } // Example usage: $root = new TreeNode(2); $root->left = new TreeNode(3); $root->right = new TreeNode(5); $root->left->left = new TreeNode(8); $root->left->right = new TreeNode(13); $root->right->left = new TreeNode(21); $root->right->right = new TreeNode(34); $solution = new Solution(); $reversedRoot = $solution->reverseOddLevels($root); // Function to print the tree for testing function printTree($root) { if ($root === null) { return; } echo $root->val . " "; printTree($root->left); printTree($root->right); } printTree($reversedRoot); // Output: 2 5 3 8 13 21 34 ?>
範例1:
輸入:
2 / \ 3 5 / \ / \ 8 13 21 34
輸出:
2 / \ 5 3 / \ / \ 8 13 21 34
範例2:
輸入:
7 / \ 13 11
輸出:
7 / \ 11 13
此解決方案使用時間複雜度為 O(n) 的深度優先搜尋有效地反轉完美二元樹奇數層的節點。該程式碼在奇數層級交換值並使用遞歸方法來處理樹。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是反轉二元樹的奇數層的詳細內容。更多資訊請關注PHP中文網其他相關文章!