该题解使用了广度优先搜索(BFS)来遍历二叉树的每一层,并计算每一层的节点值之和。算法初始化时,将二叉树的根节点放入队列中。在每一次循环中,算法处理当前队列中的所有节点(即当前层的所有节点),计算这一层的总和,并将其子节点放入下一个队列中,为处理下一层做准备。同时,算法比较当前层的总和与之前记录的最大层的总和,如果当前层的总和更大,则更新最大总和和对应的层号。这一过程持续进行,直到所有层都被处理完毕。
时间复杂度: O(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 maxLevelSum(self, root: Optional[TreeNode]) -> int:
ans, maxSum = 1, root.val # 初始化最大层号为1,最大和为根节点的值
level, q = 1, [root] # 初始化层号为1,队列q用来存储当前层的节点
while q: # 当队列不为空时
sum, nq = 0, [] # 初始化当前层的和为0,nq为下一层的节点列表
for node in q: # 遍历当前层所有节点
sum += node.val # 累加当前节点的值到sum
if node.left: # 如果左子节点存在,加入下一层节点列表
nq.append(node.left)
if node.right: # 如果右子节点存在,也加入下一层节点列表
nq.append(node.right)
if sum > maxSum: # 如果当前层的和大于之前记录的最大和
ans, maxSum = level, sum # 更新最大和及对应的层号
q = nq # 更新队列为下一层的节点列表
level += 1 # 层号递增
return ans # 返回最大和对应的层号