📅  最后修改于: 2023-12-03 15:12:04.365000             🧑  作者: Mango
在树数据结构中,每个节点都有一个值和一个或多个子节点。树的层数是从根节点开始,根节点为第一层,下面每一个节点在上一层节点的基础上加1,即为该节点所在的层数。本文将介绍如何计算树的每个级别的级别中存在的所有节点的总和,并给出实现的代码示例。
我们可以用深度优先算法遍历整棵树,记录每层的节点数量并累加。具体实现如下:
class TreeNode:
def __init__(self, val=0, children=None):
self.val = val
self.children = children if children else []
def levelSum(root: TreeNode) -> List[int]:
res = []
def dfs(node: TreeNode, level: int):
if not node:
return
if len(res) == level:
res.append(node.val)
else:
res[level] += node.val
for child in node.children:
dfs(child, level+1)
dfs(root, 0)
return res
我们定义一个 res
数组用于存储每层的节点数量,初始化为空。定义一个 dfs
方法用于遍历树,该方法接收两个参数:当前节点 node
和当前节点所在层数 level
。首先,如果当前节点为空,则直接返回。其次,判断 res
数组的长度是否等于 level
,如果等于,则说明当前层是新的一层,需要将当前节点的值加入 res
数组。否则,说明当前层已存在,需要将当前节点的值加给相应层的节点数量。然后,递归遍历当前节点的子节点,将层数加1传入递归。最后,在 levelSum
方法中调用 dfs
方法遍历整棵树,并返回 res
数组。
我们可以定义一棵树并调用 levelSum
方法计算树的每个级别的级别中存在的所有节点的总和,例如:
root = TreeNode(1, [TreeNode(2), TreeNode(3, [TreeNode(4), TreeNode(5)]), TreeNode(6, [TreeNode(7)])])
print(levelSum(root)) # [1, 5, 16]
该例中,树的层数为3,分别有1个节点、2个节点、3个节点,因此 levelSum
方法返回的数组为 [1, 5, 16]
。