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