EC13-使用层次遍历(广度优先搜索)计算二叉树的高度¶
代码实现¶
代码逻辑解析¶
1. 层次遍历基本原理¶
- 使用队列实现广度优先搜索(BFS)
- 按照从上到下、从左到右的顺序访问节点
- 逐层处理每个节点
2. 关键变量说明¶
| C | |
|---|---|
3. 层次控制机制¶
核心思想:按层处理节点
- last 变量标记当前层的最后一个节点在队列中的位置
- 当处理到该节点时,说明当前层已处理完毕
- 此时更新层数,并将 last 设置为下一层的最后一个节点位置
4. 算法执行流程¶
- 根节点入队
- 循环处理队列中的节点
- 每处理一个节点,将其子节点入队
- 当处理完当前层的最后一个节点时,层数加1
- 更新
last为当前队列尾部位置(下一层的最后节点)
时间复杂度分析¶
1. 节点访问次数¶
- 每个节点恰好被访问一次
- 每个节点的左右子节点最多被检查一次
- 总的节点处理次数:n(节点数)
2. 队列操作复杂度¶
- 入队操作:O(1)
- 出队操作:O(1)
- 总操作次数:O(n)
3. 总体时间复杂度¶
O(n) - 线性时间复杂度
空间复杂度分析¶
1. 队列空间使用¶
- 队列最大可能存储所有节点
- 在完全二叉树中,最后一层节点数约为 n/2
- 队列空间复杂度:O(n)
2. 额外变量空间¶
- 使用了常量级别的额外变量(front, rear, last, level)
- 空间复杂度:O(1)
3. 总体空间复杂度¶
O(n) - 队列可能存储最多 n 个节点
较难理解部分的说明¶
1. 层次控制机制详解¶
| C | |
|---|---|
图解说明¶
假设二叉树结构如下:
执行过程:
2. 队列边界处理¶
这是典型的队尾插入、队头删除的队列操作模式。
延伸知识点¶
1. 递归版本对比¶
| C | |
|---|---|
2. 改进的层次遍历版本¶
3. 层次遍历的其他应用¶
输出每层节点¶
计算每层节点数¶
4. 循环队列优化¶
5. 实际应用场景¶
- 文件系统:目录树的层级深度分析
- 组织架构:公司管理层级统计
- 游戏开发:技能树的深度计算
- 网络拓扑:路由跳数计算
- 编译器:语法树的嵌套层次分析
6. 性能对比总结¶
| 方法 | 时间复杂度 | 空间复杂度 | 优点 | 缺点 |
|---|---|---|---|---|
| 层次遍历 | O(n) | O(n) | 直观易懂,可扩展性强 | 空间消耗大 |
| 递归遍历 | O(n) | O(h) | 空间效率高 | 可能栈溢出 |
层次遍历求树高度的方法体现了广度优先搜索的核心思想,是树算法中的重要技术,特别适用于需要按层处理的场景。