news 2026/4/18 8:03:41

二叉树层序遍历(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/4/17 1:09:11

校平机:让金属板材变平整的“整形医生“

‍在机械制造、汽车生产、钢板加工等领域&#xff0c;我们常常能看到一种专门用于矫正金属板材平整度的设备——校平机。它就像是金属板材的"整形医生"&#xff0c;能够将弯曲、翘曲的板材变得平整如镜。一、什么是校平机&#xff1f;校平机&#xff08;也称为矫平机…

作者头像 李华
网站建设 2026/4/18 7:04:08

npm 离线安装软件包指南(离线安装 claude code)

本文以离线安装 anthropic-ai/claude-code&#xff08;Claude Code 客户端&#xff09;和 musistudio/claude-code-router&#xff08;Claude Code Router&#xff09;为例&#xff0c;介绍如何通过 npm 原生命令实现离线全局安装。该方法适用于任何 npm 包的离线安装场景。 流…

作者头像 李华
网站建设 2026/4/18 7:54:01

导师推荐!MBA必看10个AI论文网站测评

导师推荐&#xff01;MBA必看10个AI论文网站测评 2026年MBA学术写作工具测评&#xff1a;为什么你需要这份指南 随着人工智能技术在学术领域的广泛应用&#xff0c;AI论文网站已成为MBA学生和研究者不可或缺的辅助工具。然而&#xff0c;面对市场上五花八门的平台&#xff0c;如…

作者头像 李华
网站建设 2026/4/17 18:39:14

新机械主义的 3M:从解释准则到具身智能工程方法论

一、什么是新机械主义的 3M 新机械主义&#xff08;New Mechanistic Approach&#xff09;强调&#xff1a;科学解释&#xff08;尤其在生命科学、神经科学等领域&#xff09;往往不是用“普遍定律 初始条件”去覆盖现象&#xff0c;而是通过揭示一种机制&#xff08;mechani…

作者头像 李华
网站建设 2026/4/18 3:36:54

【开题答辩全过程】以 基于微信小程序的咖啡销售系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华
网站建设 2026/4/18 3:26:50

【开题答辩全过程】以 基于SSM的航班管理系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华