搜索
首页后端开发php教程二叉树中第 K 个最大和

2583。二叉树中第 K 个最大和

难度:中等

主题:树、广度优先搜索、排序、二叉树

给你一个二叉树的根和一个正整数 k。

树中的级别总和相同级别上的节点值的总和。

返回树中第k 最大级总和(不一定不同)。如果树中的层数少于 k,则返回 -1.

注意如果两个节点到根的距离相同,则它们位于同一级别。

示例1:

Kth Largest Sum in a Binary Tree

  • 输入: root = [5,8,9,2,1,3,7,4,6​​], k = 2
  • 输出: 13
  • 说明:级别总和如下:
    • 1 级:5。
    • 2 级:8 9 = 17。
    • 第 3 级:2 1 3 7 = 13。
    • 4 级:4 6 = 10。
    • 第二个最大等级总和是13。

示例2:

Kth Largest Sum in a Binary Tree

  • 输入: root = [1,2,null,3], k = 1
  • 输出: 3
  • 说明:最大级别总和为 3。

约束:

  • 树中的节点数为n。
  • 2 5
  • 1 6
  • 1

提示:

  1. 求每一层节点的值之和并返回第k大的一个。
  2. 要找到每个级别上的节点值的总和,您可以使用 DFS 或 BFS 算法遍历树并跟踪每个节点的级别。

解决方案:

我们将按照以下步骤操作:

  1. 层序遍历:我们将使用广度优先搜索(BFS)逐层遍历树。
  2. 计算级别总和:在BFS遍历过程中,我们将计算每个级别的节点值的总和。
  3. 排序并查找第 k 个最大总和:计算所有级别的总和后,我们将对总和进行排序并检索第 k 个最大值。

让我们用 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
?>

解释:

  1. TreeNode类:我们定义TreeNode类来表示二叉树中的一个节点,其中每个节点都有一个值(val)、一个左子节点(left)和一个右子节点(右)。

  2. BFS 遍历:函数 kthLargestLevelSum 使用队列来执行 BFS 遍历。对于每个级别,我们对节点的值求和并将结果存储在数组中 ($levelSums)。

  3. 对级别总和进行排序:遍历整棵树并计算级别总和后,我们使用 rsort 对总和进行降序排序。这使我们能够轻松获取第 k 大的总和。

  4. 边缘情况处理:如果少于 k 个级别,我们返回 -1。

时间复杂度:

  • BFS 遍历:O(n),其中 n 是树中的节点数。
  • 排序:O(m log m),其中m是树中的层数。由于 m 远小于 n,因此排序速度相对较快。
  • 总体时间复杂度:O(n m log m)。

空间复杂度:

  • 队列:O(n),用于在BFS期间存储节点。
  • 级别总和:O(m),用于存储每个级别的总和。
  • 总体空间复杂度:O(n)。

这种方法确保我们有效地遍历树并返回正确的第k 最大级别总和。

联系链接

如果您发现本系列有帮助,请考虑在 GitHub 上给 存储库 一个星号或在您最喜欢的社交网络上分享该帖子?。您的支持对我来说意义重大!

如果您想要更多类似的有用内容,请随时关注我:

  • 领英
  • GitHub

以上是二叉树中第 K 个最大和的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
优化PHP代码:减少内存使用和执行时间优化PHP代码:减少内存使用和执行时间May 10, 2025 am 12:04 AM

TOOPTIMIZEPHPCODEFORDUSEMEMORYUSAGEAGEAGEAGEAGEAGEANDEXECUTITIEM,关注台词:1)USEREEREFERESCENCENCINCOPYINSTEADOFCOPYINGINATATASTRUCTURESTROUCTURESTOREDUCEMORYCONSUMPTION.2)杠杆phphppphpphp'sbuilt intimpunctionslikearray_mapforfunctionslikearray_mapforfforfforfforfasterapasterexecution.3)

PHP电子邮件:分步发送指南PHP电子邮件:分步发送指南May 09, 2025 am 12:14 AM

phpisusedforsendendemailsduetoitsignegrationwithservermailservicesand andexternalsmtpproviders,自动化notifications andMarketingCampaigns.1)设置设置yourphpenvironcormentswironmentswithaweberswithawebserverserverserverandphp,确保themailfunctionisenabled.2)useabasicscruct

如何通过PHP发送电子邮件:示例和代码如何通过PHP发送电子邮件:示例和代码May 09, 2025 am 12:13 AM

发送电子邮件的最佳方法是使用PHPMailer库。1)使用mail()函数简单但不可靠,可能导致邮件进入垃圾邮件或无法送达。2)PHPMailer提供更好的控制和可靠性,支持HTML邮件、附件和SMTP认证。3)确保正确配置SMTP设置并使用加密(如STARTTLS或SSL/TLS)以增强安全性。4)对于大量邮件,考虑使用邮件队列系统来优化性能。

高级PHP电子邮件:自定义标题和功能高级PHP电子邮件:自定义标题和功能May 09, 2025 am 12:13 AM

CustomHeadersheadersandAdvancedFeaturesInphpeMailenHanceFunctionalityAndreliability.1)CustomHeadersheadersheadersaddmetadatatatatataatafortrackingandCategorization.2)htmlemailsallowformattingandttinganditive.3)attachmentscanmentscanmentscanbesmentscanbestmentscanbesentscanbesentingslibrarieslibrarieslibrariesliblarikelikephpmailer.4)smtppapapairatienticationaltication enterticationallimpr

使用PHP和SMTP发送电子邮件的指南使用PHP和SMTP发送电子邮件的指南May 09, 2025 am 12:06 AM

使用PHP和SMTP发送邮件可以通过PHPMailer库实现。1)安装并配置PHPMailer,2)设置SMTP服务器细节,3)定义邮件内容,4)发送邮件并处理错误。使用此方法可以确保邮件的可靠性和安全性。

使用PHP发送电子邮件的最佳方法是什么?使用PHP发送电子邮件的最佳方法是什么?May 08, 2025 am 12:21 AM

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

PHP中依赖注入的最佳实践PHP中依赖注入的最佳实践May 08, 2025 am 12:21 AM

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

PHP性能调整技巧和技巧PHP性能调整技巧和技巧May 08, 2025 am 12:20 AM

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器