【剑指offer】面试题32 - III:从上到下打印二叉树 III(Java)
发布日期:2021-04-30 21:01:54
浏览次数:103
分类:精选文章
本文共 1169 字,大约阅读时间需要 3 分钟。
二叉树的层次遍历之字形输出,可以通过广度优先搜索(BFS)结合反转操作实现。以下是实现步骤和代码:
初始化:创建一个双端队列(deque)来存储当前层的节点,并初始化结果列表。
处理每一层:
- 取出队列的第一个节点,记录其值。
- 将左孩子和右孩子分别加入队列(左先右后)。
判断层数:每当处理完一层时,检查层数。如果是偶数层,则反转当前层的节点顺序。
收集结果:将反转后的节点列表(或原顺序)添加到结果中。
以下是优化后的代码:
import java.util.*;public class Solution { public List > levelOrder(TreeNode root) { List > result = new LinkedList<>(); if (root == null) { return result; } Deque deque = new LinkedList<>(); deque.offer(root); List list = new LinkedList<>(); int level = 1; while (!deque.isEmpty()) { TreeNode p = deque.poll(); list.add(p.val); if (p.left != null) { deque.offer(p.left); } if (p.right != null) { deque.offer(p.right); } if (level % 2 == 0) { Collections.reverse(list); } result.add(list); list = new LinkedList<>(); level++; } return result; }}
代码解释:
- 使用双端队列(deque)来实现队列操作,便于插入和移除操作。
- 每次循环处理一层节点,逐个取出节点并记录值。
- 根据当前层的层数(
level),判断是否为偶数层,偶数层反转当前层的节点顺序。 - 每处理完一层后,将节点列表添加到结果中,并重置列表用于下一层。
- 最后返回结果列表。
示例测试:
给定二叉树:[3,9,20,null,null,15,7]
- 第一层(level=1,奇数):[3]
- 第二层(level=2,偶数):反转后为[9,20]
- 第三层(level=3,奇数):[15,7]
最终结果:[[3], [9,20], [15,7]]
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2026年06月06日 15时12分53秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP获取当前文件的绝对路径
2023-03-01
PHP获取当前时间、时间戳的各种格式写法汇总
2023-03-01
PHP获取当前页面的完整URL
2023-03-01
php获取数据库中数据生成json,中文乱码问题的解决方案
2023-03-01
php获取文件夹中文件的两种方法
2023-03-01
PHP获取日期的一些方法总结
2023-03-01
R2学习记录
2023-03-01
PHP获取本周的每一天的时间
2023-03-01
php获取用户真实IP和防刷机制
2023-03-01
php获取网页内容的三种方法
2023-03-01
R-CNN算法优化策略
2023-03-01
PHP规范PSR0和PSR4的理解
2023-03-01
php解析ipa包,获取logo
2023-03-01
R&Rstudio安装各种包
2023-03-02
php设置cookie,在js中如何获取
2023-03-02
php设置socket超时时间
2023-03-02
php设计模式 萨莱 pdf,PHP设计模式 建造者模式
2023-03-02
PHP设计模式之----观察者模式
2023-03-02
php设计模式之装饰器模式
2023-03-02
R&Python Data Science系列:数据处理(5)--字符串函数基于R(一)
2023-03-02