news 2026/7/14 21:38:33

二叉树层序遍历(BFS)完全指南:从基础到实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树层序遍历(BFS)完全指南:从基础到实战

一、层序遍历核心概念

1.1 什么是层序遍历?

层序遍历(Level Order Traversal)是一种广度优先搜索(BFS)算法,它按照树的层次,从上到下、从左到右逐层访问每个节点。

示例二叉树: 1 ← 第1层 / \ 2 3 ← 第2层 / \ \ 4 5 6 ← 第3层 层序遍历结果:[[1], [2, 3], [4, 5, 6]] 访问顺序:1 → 2 → 3 → 4 → 5 → 6

1.2 与深度优先搜索(DFS)对比

特性层序遍历(BFS)深度优先搜索(DFS)
数据结构队列(Queue)栈(Stack)
访问顺序层次顺序深度优先
空间复杂度O(w),w为最大宽度O(h),h为树高
应用场景最短路径、层次相关路径查找、回溯

二、基础层序遍历实现

2.1 基本实现(返回一维数组)

// 基本层序遍历:返回所有节点的值(不区分层次)vector<int>levelOrderSimple(TreeNode*root){vector<int>result;if(!root)returnresult;queue<TreeNode*>q;// 核心数据结构:队列q.push(root);while(!q.empty()){TreeNode*node=q.front();// 1. 取队首q.pop();// 2. 出队result.push_back(node->val);// 3. 处理当前节点// 4. 将子节点入队(先左后右)if(node->left)q.push(node->left);if(node->right)q.push(node->right);}returnresult;}// 示例树输出:[1, 2, 3, 4, 5, 6]

2.2 分层存储的实现(返回二维数组)

// 分层存储的层序遍历:每层一个子数组vector<vector<int>>levelOrder(TreeNode*root){vector<vector<int>>result;if(!root)returnresult;queue<TreeNode*>q;q.push(root);while(!q.empty()){intlevelSize=q.size();// 关键:记录当前层节点数vector<int>currentLevel;// 处理当前层的所有节点for(inti=0;i<levelSize;i++){TreeNode*node=q.front();q.pop();currentLevel.push_back(node->val);// 将下一层节点入队if(node->left)q.push(node->left);if(node->right)q.push(node->right);}result.push_back(currentLevel);// 将当前层加入结果}returnresult;}// 示例树输出:[[1], [2, 3], [4, 5, 6]]

三、层序遍历执行过程详解

3.1 执行过程可视化

树结构: 1 / \ 2 3 / \ \ 4 5 6 执行过程追踪表: | 循环 | 队列内容 | 当前层大小 | 当前处理节点 | 操作 | 当前结果层 | |------|-----------------|------------|--------------|---------------------|--------------| | 初始 | [1] | - | - | 初始化 | [] | | 1 | [1] | 1 | 1 | 处理1,入队2、3 | [1] | | | [2, 3] | | | 完成第1层 | | | 2 | [2, 3] | 2 | 2 | 处理2,入队4、5 | [2] | | | [3, 4, 5] | | 3 | 处理3,入队6 | [2, 3] | | | [4, 5, 6] | | | 完成第2层 | | | 3 | [4, 5, 6] | 3 | 4 | 处理4,无子节点 | [4] | | | [5, 6] | | 5 | 处理5,无子节点 | [4, 5] | | | [6] | | 6 | 处理6,无子节点 | [4, 5, 6] | | | [] | | | 完成第3层 | | 最终结果:[[1], [2, 3], [4, 5, 6]]

3.2 队列状态变化图

时间轴: t0 → t1 → t2 → t3 队列: [1] → [2,3] → [4,5,6] → [] ↓ ↓ ↓ ↓ 处理: 1 2 → 3 4 → 5 → 6 完成 层次: 第1层 第2层 第3层

四、层序遍历的常见变种

4.1 自底向上层序遍历

// 从底层到顶层的层序遍历vector<vector<int>>levelOrderBottom(TreeNode*root){vector<vector<int>>result;if(!root)returnresult;queue<TreeNode*>q;q.push(root);while(!q.empty()){intlevelSize=q.size();vector<int>currentLevel;for(inti=0;i<levelSize;i++){TreeNode*node=q.front();q.pop();currentLevel.push_back(node->val);if(node->left)q.push(node->left);if(node->right)q.push(node->right);}// 关键区别:每次插入到结果的开头result.insert(result.begin(),currentLevel);}returnresult;}// 示例树输出:[[4, 5, 6], [2, 3], [1]]

4.2 锯齿形层序遍历(Z字形遍历)

// 锯齿形层序遍历:一层从左到右,下一层从右到左vector<vector<int>>zigzagLevelOrder(TreeNode*root){vector<vector<int>>result;if(!root)returnresult;queue<TreeNode*>q;q.push(root);boolleftToRight=true;// 方向标志while(!q.empty()){intlevelSize=q
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 6:12:24

深度测评自考必备AI论文平台TOP10

深度测评自考必备AI论文平台TOP10 自考论文写作工具测评&#xff1a;2026年TOP10榜单出炉 随着自考人数逐年攀升&#xff0c;论文写作成为众多考生面临的共同难题。从选题构思到文献检索&#xff0c;再到格式规范与查重修改&#xff0c;每一步都可能成为“卡壳点”。为帮助自考…

作者头像 李华
网站建设 2026/7/1 18:50:13

网站必装SSL证书的4大原因及域名SSL证书安装全指南

在数字化经营时代&#xff0c;企业网站不仅是品牌展示窗口&#xff0c;更是数据交互的核心载体。但多数企业可能忽视一个关键细节&#xff1a;未安装SSL证书的网站&#xff0c;如同向网络黑客敞开大门。据统计&#xff0c;未部署SSL证书的企业网站&#xff0c;数据泄露风险提升…

作者头像 李华
网站建设 2026/7/1 11:54:52

余行补位方法论:解码专精特新企业指数级增长的底层算法

余行补位方法论&#xff1a;解码专精特新企业指数级增长的底层算法一、传统增长范式的失效&#xff1a;从线性到指数的思维革命1.1 传统增长的三大陷阱研发陷阱&#xff1a;每年增加20%研发投入&#xff0c;却只换来5%的性能提升市场陷阱&#xff1a;每开拓一个新区域&#xff…

作者头像 李华
网站建设 2026/7/1 8:15:13

智能语音加湿器控制系统设计

阅读提示 博主是一位拥有多年毕设经验的技术人员&#xff0c;如果本选题不适用于您的专业或者已选题目&#xff0c;我们同样支持按需求定做项目&#xff0c;论文全套&#xff01;&#xff01;&#xff01; 博主介绍 CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者…

作者头像 李华
网站建设 2026/7/2 10:42:18

Zemax光学设计偶次非球面优化技巧

一、非球面K系数与高次项开启时机1. 仅开K系数◦ 用于校正初级球差&#xff0c;适合对像差要求不高的简单系统&#xff08;如单透镜、双胶合望远镜物镜&#xff09;。◦ 场景&#xff1a;中小视场、低NA成像系统&#xff0c;或作为复杂系统的“基础校正”第一步&#xff0c;避免…

作者头像 李华