1. 项目背景与问题定义
"1004 Counting Leaves"这个题目乍看简单,实则蕴含了树形结构遍历的经典算法问题。作为一名经常刷题的开发者,我第一次看到这个标题时,脑海中立即浮现出家族族谱、公司组织架构这类层级数据的统计场景。
这个问题的核心是:给定一棵树结构,要求统计每一层叶子节点的数量。就像数一棵真实树木的落叶,我们需要从树根开始,逐层记录没有子节点的末端节点数。在实际编程中,这类问题常见于层级数据处理、目录结构分析等场景。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据结构选择与算法设计
2.1 树的表示方法
对于这个问题,最常见的树表示方法有两种:
- 邻接表:使用字典或数组存储每个节点的子节点
- 节点对象:构建包含children指针的节点类
考虑到输入格式通常是节点间的父子关系,我推荐使用邻接表:
python复制tree = {
1: [2, 3],
2: [4, 5],
3: [6],
4: [],
5: [7, 8],
6: [],
7: [],
8: []
}
2.2 遍历算法选择
广度优先搜索(BFS)天然适合按层统计的需求。以下是BFS的标准实现框架:
python复制from collections import deque
def count_leaves(tree, root):
if not tree:
return []
result = []
queue = deque([(root, 0)]) # (node, level)
while queue:
node, level = queue.popleft()
# 处理当前层级的统计逻辑
# ...
for child in tree[node]:
queue.append((child, level + 1))
return result
3. 完整解决方案实现
3.1 核心算法实现
基于上述框架,完整的叶子节点统计实现如下:
``
