当前位置: 首页 > news >正文

层序遍历:BFS核心技巧

一、什么是层序遍历

层序遍历:按照从上到下、每一层从左到右依次访问节点。本质就是广度优先搜索 BFS,借助队列 queue实现。

递归是深度优先 DFS;队列迭代是广度优先 BFS。

二、核心思路

  1. 把根节点入队
  2. 每次统计当前队列元素个数(当前层节点数)
  3. 循环取出当前层所有节点
  4. 取出节点后,先左后右把孩子入队
  5. 逐层往下,直到队列为空

三、层序遍历基础模板(打印版)

#include <iostream> #include <queue> using namespace std; struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; // 层序遍历 BFS void levelOrder(TreeNode* root) { if(!root) return; queue<TreeNode*> q; q.push(root); while(!q.empty()) { // 当前层节点数量 int size = q.size(); for(int i = 0; i < size; ++i) { TreeNode* cur = q.front(); q.pop(); cout << cur->val << " "; // 左孩子入队 if(cur->left) q.push(cur->left); // 右孩子入队 if(cur->right) q.push(cur->right); } } }

四、LeetCode 标准模板(分层存二维数组)

很多题目要求按层保存结果,返回二维 vector,刷题必备:

#include <vector> #include <queue> using namespace std; vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(!root) return res; queue<TreeNode*> q; q.push(root); while(!q.empty()) { int size = q.size(); vector<int> layer; for(int i = 0; i < size; ++i) { TreeNode* cur = q.front(); q.pop(); layer.push_back(cur->val); if(cur->left) q.push(cur->left); if(cur->right) q.push(cur->right); } res.push_back(layer); } return res; }

五、完整测试代码

int main() { // 构建二叉树 TreeNode* root = new TreeNode(1); root->left = new TreeNode(2); root->right = new TreeNode(3); root->left->left = new TreeNode(4); root->left->right = new TreeNode(5); cout << "层序遍历:"; levelOrder(root); return 0; }

输出:

1 2 3 4 5

六、层序遍历经典适用题型

  1. 二叉树层序遍历、按层输出
  2. 二叉树最大深度、最小深度
  3. 二叉树右视图、左视图
  4. 二叉树每层平均值
  5. 二叉树之字形遍历

七、DFS 递归 vs BFS 队列 一句话区别

  • DFS 前中后序:一路往深走,用递归 / 栈
  • BFS 层序遍历:一层一层走,用队列

八、新手易错点

  1. 不记录size,无法区分每一层
  2. 孩子入队顺序写反:先右后左
  3. 根节点为空不特判,直接入队崩溃
  4. 混淆深度优先和广度优先使用场景

九、今日总结

  1. 层序遍历 = BFS 广度优先,依赖队列实现
  2. 固定套路:取每层 size → 遍历当前层 → 孩子入队
  3. 记住两套模板:简单打印版、二维数组分层版
  4. 层序是解决二叉树层级类题目万能套路
http://www.jsqmd.com/news/814230/

相关文章:

  • 2026年分公司注册靠谱排名 - mypinpai
  • 2026年3月市场可靠的除尘器企业推荐,蘑菇菌渣制粒机/木材粉碎机/精饲料制粒机/燃料搅拌机/菌渣烘干机,除尘器公司推荐 - 品牌推荐师
  • 开源项目贡献流程标准化:CLA与Issue/PR模板实践指南
  • AI应用安全新挑战:基于模糊测试的提示词注入漏洞自动化检测
  • 2026年技术过硬的深圳小程序制作推荐榜单
  • DevSquad:AI多智能体协同开发平台架构与实战指南
  • 3分钟快速上手:Figma中文界面插件的终极解决方案
  • 全栈AI聊天应用LLMChat:FastAPI+Flutter构建与本地部署实战
  • Python自动化脚本:模拟鼠标键盘输入保持系统活跃状态
  • macOS开发者必备:Cacheout智能缓存清理工具详解与实战
  • 可灵活扩展的企业即时通讯工具对比分析:从三个维度看清选型本质 - 小天互连即时通讯
  • 大语言模型剪枝技术:Týr-the-Pruner框架解析
  • 从协同过滤到深度学习:Spark机器学习实战三部曲
  • RISC-V开源处理器IP:模块化设计与低功耗嵌入式应用实践
  • 面向对象的架构
  • WorkshopDL:一站式高效下载Steam创意工坊的智能解决方案
  • Crystal:基于任务流的前端构建工具,重塑模块化构建流程
  • 基于React+TypeScript+Vite的现代化仪表盘开发实践与架构解析
  • Python pip升级报错怎么办_强制更新与重新安装pip方法
  • 2026年|论文AIGC率过高怎么办?知网维普从60%降到5%的10款工具实测! - 降AI实验室
  • Graphlink:基于节点图的可视化LLM协作桌面环境部署与实战
  • 面对对象程序
  • AI编程助手代码质量实时引导:从规则左移到IDE集成实践
  • 碳化钙和氢化钙的电子式
  • 本地化AI代码解释器:私有部署、安全执行与智能体框架实践
  • 五分钟用Python为嵌入式应用接入Taotoken大模型服务
  • 长沙黄金回收避坑知识点 小白变现必收藏 - 奢侈品回收测评
  • IO-Link技术解析:工业自动化通信与LTC2874/LT3669芯片应用
  • Ansible 2.11 使用 copy 模块报错 Permission denied 如何提权?
  • 基于MCP协议的AI智能体:打通CRM与广告平台的数据自动化