📌  相关文章
📜  二叉树中每个水平级别的叶节点总和(1)

📅  最后修改于: 2023-12-03 15:36:03.307000             🧑  作者: Mango

二叉树中每个水平级别的叶节点总和

在二叉树中,每个水平级别可能包含多个叶节点。本文介绍如何计算二叉树中每个水平级别的叶节点总和。

思路

首先需要遍历二叉树,可以选择先序、中序、后序遍历中的任意一种。在遍历时,需要记录每个节点的深度信息。当遍历到叶节点时,依据深度信息,在对应的水平级别上累加计数。最终可以得到每个水平级别的叶节点总和。

代码实现
定义二叉树节点
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right
计算每个级别的叶节点总和
def computeLevelLeafSum(root: TreeNode) -> List[int]:
    res = [0]
    
    # 记录每个节点的深度信息
    def dfs(node: TreeNode, depth: int):
        if not node:
            return
        
        # 到达叶节点,累加叶节点数量
        if not node.left and not node.right:
            if depth >= len(res):
                res.append(node.val)
            else:
                res[depth] += node.val
        
        dfs(node.left, depth + 1)
        dfs(node.right, depth + 1)
    
    dfs(root, 1)
    return res
示例
构造二叉树
      10
     /  \
    5   15
   / \    \
  3   7    18
root = TreeNode(10)
root.left = TreeNode(5)
root.right = TreeNode(15)
root.left.left = TreeNode(3)
root.left.right = TreeNode(7)
root.right.right = TreeNode(18)
计算每个级别的叶节点总和
computeLevelLeafSum(root)  # [0, 3, 25, 18]
  • 第一级别(根节点)并不是叶节点,因此为0。
  • 第二级别有一个叶节点值为3。
  • 第三级别有两个叶节点,分别为7和18,它们的和为25。
  • 第四级别只有一个叶节点,值为18。