2583。二元樹中第 K 個最大和
難度:中
主題:樹、廣度優先搜尋、排序、二元樹
給你一個二元樹的根和一個正整數 k。
樹中的層級總和是相同層級上的節點值的總和。
返回樹中第k第 最大級總和(不一定不同)。如果樹中的層數少於 k,則回傳 -1.
注意如果兩個節點到根的距離相同,則它們位於同一層級。
範例1:
範例2:
約束:
提示:
解:
我們將按照以下步驟操作:
讓我們用 PHP 實作這個解:2583。二元樹中第 K 個最大和
<?php // Definition for a binary tree node. class TreeNode { public $val; public $left; public $right; public function __construct($val = 0, $left = null, $right = null) { $this->val = $val; $this->left = $left; $this->right = $right; } } /** * @param TreeNode $root * @param Integer $k * @return Integer */ function kthLargestLevelSum($root, $k) { ... ... ... /** * go to ./solution.php */ } // Example 1: // Input: root = [5,8,9,2,1,3,7,4,6], k = 2 $root1 = new TreeNode(5); $root1->left = new TreeNode(8); $root1->right = new TreeNode(9); $root1->left->left = new TreeNode(2); $root1->left->right = new TreeNode(1); $root1->right->left = new TreeNode(3); $root1->right->right = new TreeNode(7); $root1->left->left->left = new TreeNode(4); $root1->left->left->right = new TreeNode(6); echo kthLargestLevelSum($root1, 2); // Output: 13 // Example 2: // Input: root = [1,2,null,3], k = 1 $root2 = new TreeNode(1); $root2->left = new TreeNode(2); $root2->left->left = new TreeNode(3); echo kthLargestLevelSum($root2, 1); // Output: 3 ?>
TreeNode類別:我們定義TreeNode類別來表示二元樹中的一個節點,其中每個節點都有一個值(val)、一個左子節點(left)和一個右子節點(右)。
BFS 遍歷:函數 kthLargestLevelSum 使用佇列來執行 BFS 遍歷。對於每個級別,我們對節點的值求和並將結果儲存在數組中 ($levelSums)。
對層級總和進行排序:遍歷整棵樹併計算層級總和後,我們使用 rsort 對總和進行降序排序。這使我們能夠輕鬆獲得第 k 大的總和。
邊緣情況處理:如果少於 k 個級別,我們返回 -1。
這種方法確保我們有效地遍歷樹並返回正確的第k第 最大等級總和。
聯絡連結
如果您發現本系列有幫助,請考慮在 GitHub 上給 存儲庫 一個星號或在您最喜歡的社交網絡上分享該帖子? 。您的支持對我來說意義重大!
如果您想要更多類似的有用內容,請隨時關注我:
以上是二元樹中第 K 個最大和的詳細內容。更多資訊請關注PHP中文網其他相關文章!