Leetcode日记 2583. 二叉树中的第 K 大层和

Leetcode日记 2583. 二叉树中的第 K 大层和

题目:

给你一棵二叉树的根节点 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大的层和,那么我们就应该把二叉树整个层次遍历
  • 其次,我们把遍历后的结果再遍历一遍,求出层和,
  • 最后,我们直接使用sort函数进行排序,再返回第k大的值
  • 改进:求层和,可以放在遍历二叉树的时候进行,这样可以减少整体的时间按复杂度。并且在遍历二叉树之后判断一次,层高和k的大小,如果层高小于k就可以直接抛出-1结束,毕竟sort的时间复杂度也是O(nlgn),算是这里面时间复杂度最大的了,不过这道题对于时间复杂度的考量并没有很多

代码实现

python 复制代码
class TreeNode(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
root = TreeNode(1)  
root.left = TreeNode(2)  
root.right = TreeNode(3)  
root.left.left = TreeNode(4)  
root.left.right = TreeNode(5)  
root.right.left = TreeNode(6)  
root.right.right = TreeNode(7) 
from typing import Optional
class Solution:
    def kthLargestLevelSum(self, root: Optional[TreeNode], k: int) -> int:
        if root is None:  
            return [] 
        
        
        queue = [root]
        result = []
        while queue :
            result.append([])
            temp = []
            for i in range(len(queue)) :
                if queue[i].left :
                    temp.append(queue[i].left)
                if queue[i].right :
                    temp.append(queue[i].right)
                result[-1].append(queue[i].val)
            queue = temp
        if len(result) < k :
            return -1
        for i in range(len(result)) :
            result[i] = sum(result[i])
        result.sort(reverse=True)
        return result[k-1]
a = Solution().kthLargestLevelSum(root,2)
print(a)

制作不易,感谢三连,谢谢啦

相关推荐
Coovally AI模型快速验证29 分钟前
MMYOLO:打破单一模式限制,多模态目标检测的革命性突破!
人工智能·算法·yolo·目标检测·机器学习·计算机视觉·目标跟踪
可为测控1 小时前
图像处理基础(4):高斯滤波器详解
人工智能·算法·计算机视觉
Milk夜雨2 小时前
头歌实训作业 算法设计与分析-贪心算法(第3关:活动安排问题)
算法·贪心算法
ℳ₯㎕ddzོꦿ࿐2 小时前
解决Python 在 Flask 开发模式下定时任务启动两次的问题
开发语言·python·flask
CodeClimb2 小时前
【华为OD-E卷 - 第k个排列 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
一水鉴天2 小时前
为AI聊天工具添加一个知识系统 之63 详细设计 之4:AI操作系统 之2 智能合约
开发语言·人工智能·python
BoBoo文睡不醒2 小时前
动态规划(DP)(细致讲解+例题分析)
算法·动态规划
Channing Lewis2 小时前
什么是 Flask 的蓝图(Blueprint)
后端·python·flask
B站计算机毕业设计超人2 小时前
计算机毕业设计hadoop+spark股票基金推荐系统 股票基金预测系统 股票基金可视化系统 股票基金数据分析 股票基金大数据 股票基金爬虫
大数据·hadoop·python·spark·课程设计·数据可视化·推荐算法
觅远2 小时前
python+playwright自动化测试(四):元素操作(键盘鼠标事件)、文件上传
python·自动化