1. 问题背景与理解
第一次看到这个题目时,我正坐在星巴克调试一个二叉树遍历的bug。题目描述很简单:给定一棵二叉树,找到最深层叶子节点的和。这个看似简单的问题,实际上考察了对二叉树遍历和层级处理的综合理解。
在真实的工程场景中,类似的需求并不少见。比如在DOM树操作中,我们可能需要统计最深嵌套层级的元素数量;在游戏开发中,可能需要计算场景树最底层物体的属性总和。理解这个算法,对处理树形结构数据有着重要意义。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心算法思路
2.1 深度优先搜索(DFS)方案
我最先想到的是DFS方案。通过递归遍历,我们可以记录当前深度和最深层级:
python复制def deepestLeavesSum(root):
total = 0
max_depth = 0
def dfs(node, depth):
nonlocal total, max_depth
if not node:
return
if depth > max_depth:
max_depth = depth
total = node.val
elif depth == max_depth:
total += node.val
dfs(node.left, depth + 1)
dfs(node.right, depth + 1)
dfs(root, 0)
return total
这个实现有几个关键点:
- 使用闭包变量total和max_depth来记录状态
- 当发现更深节点时,重置total和max_depth
- 遇到相同深度节点时累加值
时间复杂度O(n),空间复杂度O(h),h为树高。
2.2 广度优先搜索(BFS)方案
BFS是更直观的层级遍历方案。我们可以逐层处理,最后一层的和就是解:
python复制from collections import deque
def deepestLeavesSum(root):
if
