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

二叉树算法之【Z字型层序遍历】

目录

LeetCode-103题


LeetCode-103题

给定一个二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)

class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> result = new ArrayList<>();// checkif (root == null)return result;// 借助队列来实现Queue<TreeNode> queue = new LinkedList<>();// 先将根节点放到队列中queue.offer(root);// 用于记录当前层的节点数量int c1 = 1;// 用于标识添加方向int flag = 1;// 只要队列不为空while (!queue.isEmpty()) {// 用于记录下一层节点数量int c2 = 0;LinkedList<Integer> inner = new LinkedList<>();for (int i = 0; i < c1; i++) {TreeNode curr = queue.poll();// 根据标识判断addLast还是addFirstif (flag % 2 == 1) {inner.addLast(curr.val);} else {inner.addFirst(curr.val);}// 有左子节点if (curr.left != null) {// 将左子节点添加到队列中queue.offer(curr.left);// 记录下一层节点数量标识+1c2++;}// 有右子节点if (curr.right != null) {// 将右子节点添加到队列中queue.offer(curr.right);// 记录下一层节点数量标识+1c2++;}}// 下一轮遍历通过c1就知道当前层有多少个节点了c1 = c2;// 下一层换个方向,以达到Z字形flag++;result.add(inner);}return result;}
}

http://www.dtcms.com/a/310996.html

相关文章:

  • Lock 接口及实现类详解:从 ReentrantLock 到并发场景实践
  • Java web(02)
  • Javascript面试题及详细答案150道之(016-030)
  • kong网关集成Safeline WAF 插件
  • 排序算法大全:从插入到快速排序
  • 通过解决docker network connect实现同一个宿主机不同网络的容器间通信
  • 深入理解 Docker 容器网络:为什么用 host 网络模式能解决连通性问题?
  • DockerFile文件执行docker bulid自动构建镜像
  • 前端手撕题总结篇(算法篇——来自Leetcode牛客)
  • mac 安装pytho3 和pipx
  • docker desktop入门(docker桌面版)(提示wsl版本太低解决办法)
  • uboot armv8 启动流程之 linker script
  • 电脑手机热点方式通信(下)
  • QT中使用OpenCV保姆级教程
  • Vue项目根据OpenAPI自动生成请求后端接口ts文件
  • 嵌入式 - 数据结构:数据结构基础与链表
  • opencv自定义滤波
  • 计算机网络:任播和负载均衡的区别
  • 机动车超时停车识别准确率↑32%:陌讯动态时序建模算法实战解析
  • c++显示优化
  • 原生JS使用svg-pan-zoom库平移和缩放svg
  • 【网络与爬虫 37】ScrapeFly深度解析:云端爬虫革命,告别复杂部署拥抱一键API
  • ICCV2025 | 对抗样本智能安全方向论文汇总 | 持续更新中~
  • 数字人开发01--后端服务配置
  • ABP VNext + Redis Bloom Filter:大规模缓存穿透防护与请求去重
  • 嵌入式第十八课!!数据结构篇入门及单向链表
  • Python 类三大方法体系深度解析:静态方法、类方法与实例方法
  • LeetCode 每日一题 2025/7/28-2025/8/3
  • js的BOM
  • Redis核心机制与实践深度解析:从持久化到分布式锁