📌  相关文章
📜  计算树的每个级别的级别中存在的所有节点的总和(1)

📅  最后修改于: 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]