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

二叉树的层序遍历--思路===bfs的应用,以及java中队列的方法实操

层序遍历的思路



packagesiyangyuan;importjava.util.*;/** * Class Name :LevelOrderTraversal * Package :siyangyuan * Description: * * @Author: Mr.chunxugao * Create: 2026-03-15- 9:56 * @Version:v1.0 */classBSTNode{intval;BSTNodeleft;BSTNoderight;BSTNode(){}BSTNode(intx){this.val=x;}BSTNode(intx,BSTNodeleft,BSTNoderight){this.val=x;this.left=left;this.right=right;}}//层序遍历publicclassLevelOrderTraversal{publicstaticvoidmain(String[]args){// 构建测试二叉树// 3// / \// 9 20// / \// 15 7BSTNoderoot=newBSTNode(3);root.left=newBSTNode(9);root.right=newBSTNode(20);root.right.left=newBSTNode(15);root.right.right=newBSTNode(7);List<List<Integer>>result=levelOrder(root);System.out.println("层序遍历结果:"+result);}//层序遍历,适用bfspublicstaticList<List<Integer>>levelOrder(BSTNoderoot){List<List<Integer>>res=newArrayList<>();if(root==null)returnres;// 核心:用队列存储每一层的节点Queue<BSTNode>queue=newLinkedList<>();queue.offer(root);// 步骤 4:循环遍历(队列为空时结束)// 只要队列里还有节点,就一直遍历。while(!queue.isEmpty()){// 步骤 5:分层处理(最关键!)// 先获取当前队列的大小 → 这就是当前层的节点总数intn=queue.size();//保存当前层的节点值List<Integer>curqueue=newArrayList<>();// 循环这个次数,把当前层所有节点一次性处理完for(inti=0;i<n;i++){// 处理逻辑:// 节点出队BSTNodecurNode=queue.poll();// 把节点值加入当前层列表curqueue.add(curNode.val);//左、右子节点不为空 → 入队(给下一层用)if(curNode.left!=null){queue.offer(curNode.left);}if(curNode.right!=null){queue.offer(curNode.right);}}// 步骤 6:收集结果// 当前层遍历完,把这一层的列表加入总结果集。res.add(curqueue);}returnres;}}

BFS的常规代码

packagesiyangyuan;importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;importjava.util.Queue;// 二叉树节点classTreeNode{intval;TreeNodeleft,right;TreeNode(intval){this.val=val;}}publicclassLevelOrder{// 🔥 BFS 层序遍历(万能常规模板)publicstaticList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>res=newArrayList<>();if(root==null)returnres;// 1. 队列初始化Queue<TreeNode>queue=newLinkedList<>();queue.offer(root);// 2. 核心循环(固定不变)while(!queue.isEmpty()){intlevelSize=queue.size();List<Integer>level=newArrayList<>();// 3. 遍历当前层(固定不变)for(inti=0;i<levelSize;i++){TreeNodenode=queue.poll();level.add(node.val);// 4. 子节点入队(固定不变)if(node.left!=null)queue.offer(node.left);if(node.right!=null)queue.offer(node.right);}res.add(level);}returnres;}publicstaticvoidmain(String[]args){// 测试树TreeNoderoot=newTreeNode(3);root.left=newTreeNode(9);root.right=newTreeNode(20);root.right.left=newTreeNode(15);System.out.println(levelOrder(root));}}
http://www.jsqmd.com/news/484019/

相关文章:

  • UG NX 类型过滤器使用
  • 基于FPGA的8点DCT变换Verilog实现探索
  • Simpack轨道之波磨不平顺设置那些事儿
  • 项目实训。
  • FPGA 中 VHDL 实现 RS422/485 串口通信
  • 在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
  • spring框架springbean依赖及单一项目
  • 探索单相三电平 NPC 逆变器:载波层叠与调制策略
  • 怎么把claude code的claude模型的url和key永久设置成自己的
  • C语言指针篇(上部)
  • 详解bert模型
  • IR300工业路由器+InConnect云平台:实现4G远程维护PLC的完整配置指南
  • 2026年社交破冰与脱单神器深度测评:拯救冷场,到底谁才是真硬核?
  • 深入了解C语言:通用高级语言的强大特性与广泛应用
  • 探索永磁同步电机非线性磁链观测器源代码的奇妙世界
  • 探秘圆极化连续域束缚态:COMSOL光子晶体超表面模拟之旅
  • 最近邻点对问题(Closest Pair of Points)
  • MATLAB R2021B中基于LMS自适应滤波器的窄带信号去噪算法及其在多种信号领域的应用
  • Anthropic 登《时代》封面 递归自我改进引 AI 发展拐点争议
  • 机房动环监控系统的全面分析与实践经验总结
  • 在linux(Centos)中Mysql的端口修改保姆级教程
  • 记录学习过程【数据分析二】
  • [NOIP 2018 普及组] 摆渡车 / [蓝桥杯青少年组国赛 2023] 月球疏散行动
  • 开关磁阻电机SRM12-8技术详解:额定功率达2200w,转速稳定达额定转速3450rpm
  • 字符串统计工具:字数统计、字符分析、词法分析、编码分析
  • 禅道下载安装教程
  • KMP模板——【# P3375 【模板】KMP】
  • 闭眼入!9个一键生成论文工具深度测评:全行业通用,开题报告+毕业论文+科研写作全搞定
  • 纯水设备哪家性价比高
  • IDA Pro 9.3 全功能绿色便携版(2026最新适配)|内置Python3.11.9+全量插件一键初始化