该题解采用了层序遍历的方式来遍历二叉树,并计算每一层的节点值总和。首先,使用一个列表`layer`来存储当前层的所有节点。遍历这些节点,计算它们的值之和,并将他们的非空左右子节点添加到`next_layer`列表中。这个过程重复进行,直到没有更多的层(即`layer`为空)。所有层的和被存储在列表`ls`中。最后,将`ls`排序,并取出第`k`大的元素。如果层数少于`k`,则返回`-1`。
时间复杂度: O(n log n)
空间复杂度: O(n)
# 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 = right
class Solution:
def kthLargestLevelSum(self, root: Optional[TreeNode], k: int) -> int:
ls=[] # 存储每一层的和
layer=[root] # 当前层的节点
while layer:
next_layer=[] # 下一层的节点
cs=0 # 当前层的和
for node in layer:
cs+=node.val # 累加当前层的节点值
if node.left is not None:
next_layer.append(node.left) # 添加左子节点到下一层
if node.right is not None:
next_layer.append(node.right) # 添加右子节点到下一层
layer=next_layer # 更新当前层
ls.append(cs) # 记录当前层的和
ls.sort() # 排序层和
return ls[-k] if len(ls)>=k else -1 # 返回第k大的层和,如果层数不足则返回-1