当前位置: 首页 > news >正文

LeetCode 2583.二叉树中的第 K 大层和:层序遍历 + 排序

【LetMeFly】2583.二叉树中的第 K 大层和:层序遍历 + 排序

力扣题目链接:https://leetcode.cn/problems/kth-largest-sum-in-a-binary-tree/

给你一棵二叉树的根节点 root 和一个正整数 k

树中的 层和 是指 同一层 上节点值的总和。

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

注意,如果两个节点与根节点的距离相同,则认为它们在同一层。

 

示例 1:

输入:root = [5,8,9,2,1,3,7,4,6], k = 2
输出:13
解释:树中每一层的层和分别是:
- Level 1: 5
- Level 2: 8 + 9 = 17
- Level 3: 2 + 1 + 3 + 7 = 13
- Level 4: 4 + 6 = 10
第 2 大的层和等于 13 。

示例 2:

输入:root = [1,2,null,3], k = 1
输出:3
解释:最大的层和是 3 。

 

提示:

  • 树中的节点数为 n
  • 2 <= n <= 105
  • 1 <= Node.val <= 106
  • 1 <= k <= n

方法一:层序遍历 + 排序

如果已经掌握了二叉树的层序遍历,那么这道题将会如鱼得水。

我们依然进行层序遍历,在层序遍历的过程中,计算每一层的节点值之和,并加入到一个数组中。

遍历结束后,对数组进行排序,返回第k大值或-1即可。

  • 时间复杂度 O ( N 1 + N 2 log ⁡ N 2 ) O(N1 + N2\log N2) O(N1+N2logN2),其中 N 1 N1 N1是二叉树节点个数, N 2 N2 N2是二叉树深度
  • 空间复杂度 O ( N 3 + N 2 ) O(N3 + N2) O(N3+N2),其中 N 3 N3 N3是最多一层的节点个数

时空复杂度也可以将全部的 N N N都视为二叉树节点个数。

AC代码

C++
typedef long long ll;
class Solution {
public:ll kthLargestLevelSum(TreeNode* root, int k) {vector<ll> values;queue<TreeNode*> q;q.push(root);while (q.size()) {ll cnt = 0;for (int _ = q.size(); _ > 0; _--) {TreeNode* thisNode = q.front();q.pop();cnt += thisNode->val;if (thisNode->left) {q.push(thisNode->left);}if (thisNode->right) {q.push(thisNode->right);}}values.push_back(cnt);}sort(values.begin(), values.end());return k > values.size() ? -1 : values[values.size() - k];}
};
Python

注意本题数据级别是 1 0 5 10^5 105,不能使用数组切片模拟队列的方式。

# # Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = rightclass Solution:def kthLargestLevelSum(self, root: TreeNode, k: int) -> int:values = []q = [root]while q:cnt = 0thisLayer = qq = []for thisNode in thisLayer:cnt += thisNode.valif thisNode.left:q.append(thisNode.left)if thisNode.right:q.append(thisNode.right)values.append(cnt)values.sort()return values[len(values) - k] if len(values) >= k else -1

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/136252010

http://www.lryc.cn/news/305625.html

相关文章:

  • element ui 安装 简易过程 已解决
  • websoket
  • 案例:微服务从Java/SpringBoot迁移到Golan
  • 小波变换模拟
  • cv::Mat图像操作
  • 【机器学习基础】一元线性回归(适合初学者的保姆级文章)
  • 2024年软件测试岗位-面试
  • 【坑】Spring Boot整合MyBatis,一级缓存失效
  • J7 - 对于ResNeXt-50算法的思考
  • R3F(React Three Fiber)基础篇
  • torch\tensorflow在大语言模型LLM中的作用
  • 设计模式-创建型模式-单例模式
  • 备战蓝桥杯—— 双指针技巧巧答链表1
  • 微信小程序返回上一级页面并自动刷新数据
  • Spring⼯⼚创建复杂对象
  • Top-N 泛型工具类
  • Java 后端面试指南
  • 142.环形链表 ||
  • Nacos、Eureka、Zookeeper注册中心的区别
  • CSS重点知识整理1
  • 【Langchain多Agent实践】一个有推销功能的旅游聊天机器人
  • 算法学习(十二)并查集
  • TensorRT及CUDA自学笔记003 NVCC及其命令行参数
  • 数据库管理-第154期 Oracle Vector DB AI-06(20240223)
  • 解决uni-app vue3 nvue中使用pinia页面空白问题
  • 不用加减乘除做加法
  • 旅游组团自驾游拼团系统 微信小程序python+java+node.js+php
  • LeetCode 第41天 | 背包问题 二维数组 一维数组 416.分割等和子集 动态规划
  • Ubuntu20.04和Windows11下配置StarCraft II环境
  • 【NCom】:通过高温气相合成调节Pt-CeO2相互作用以提高晶格氧的还原性