
数据结构和算法十五
特例处理:如果二叉树为空,直接返回空列表。 初始化:创建一个队列,用于存储当前层的节点,初始时将根节点加入队列。创建一个结果列表,用于存储每一层的节点值列表。 循环处理:当队列不为空时,处理当前层的所有节点: 结果处理:将当前层的节点值列表添加到结果列表中。 返回结果:返回结果列表。
发布日期:2021-05-10 23:52:13
浏览次数:32
分类:精选文章
本文共 1624 字,大约阅读时间需要 5 分钟。
剑指 Offer 32 - II. 从上到下打印二叉树 II
题目要求实现一个函数,按照层序遍历的方式打印二叉树的节点值,每一层的节点按从左到右的顺序打印,并且每一层的节点值组成一个列表,所有层的列表组成最终的输出。
解题思路
该问题可以通过广度优先搜索(BFS)算法来解决。BFS算法使用队列来实现,能够按层遍历二叉树。具体步骤如下:
- 创建一个临时列表,用于存储当前层的节点值。
- 循环处理当前层的节点数量,将每个节点取出队列,添加到临时列表中。
- 将每个节点的左孩子和右孩子加入队列(如果不为空)。
解决代码
import java.util.ArrayList;import java.util.LinkedList;import java.util.List;class TreeNode { int val; TreeNode left; TreeNode right; public TreeNode(int val) { this.val = val; this.left = null; this.right = null; }}public class Solution { public List
> levelOrder(TreeNode root) { List
> res = new ArrayList<>(); if (root == null) { return res; } LinkedList queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { int levelSize = queue.size(); List levelList = new ArrayList<>(); for (int i = 0; i < levelSize; i++) { TreeNode node = queue.poll(); levelList.add(node.val); if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } res.add(levelList); } return res; }}
代码解释
- TreeNode 类:定义了二叉树的节点结构,包含节点值、左孩子和右孩子。
- levelOrder 方法:实现了从上到下按层打印二叉树的功能。
- 初始化:检查根节点是否为空,若为空返回空列表。否则,初始化队列,并将根节点加入队列。
- 循环处理:当队列不为空时,处理当前层的所有节点。创建临时列表存储当前层的节点值,并将每个节点的左孩子和右孩子加入队列。
- 结果处理:将当前层的节点值列表添加到结果列表中。
- 返回:最终返回结果列表,包含每一层的节点值列表。
该算法的时间复杂度为 O(N),其中 N 是二叉树的节点总数。空间复杂度为 O(N),最坏情况下(如平衡二叉树),队列中最多同时存储 N/2 个节点。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月28日 16时47分07秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Remove Extra one 维护前缀最大最小值
2019-03-11
Gradle实战四:Jenkins持续集成
2019-03-11
wgcloud运维监控系统错误:防篡改校验错误次数大于10次,不再上报数据
2019-03-11
iOS 开发官方文档链接收集
2019-03-11
MFC 自定义消息发送字符串
2019-03-12
Linux操作系统的安装与使用
2019-03-12
C++ 继承 详解
2019-03-12
OSPF多区域
2019-03-12
Docker入门之-镜像(二)
2019-03-12
数据结构——链表(3)
2019-03-12
去了解拉绳位移编码器的影响因素
2019-03-12
无法初始化Winsock2.2处理
2019-03-12
vMotion 操作失败进度卡在14% ,报错: Operation Timed out
2019-03-12
重置UAG Application admin密码
2019-03-12
Horizon Daas租户管理平台扩展分配时报:内部错误
2019-03-12
嵌入式系统试题库(CSU)
2019-03-12
【自考】之信息资源管理(一)
2019-03-12
setup facatory9.0打包详细教程(含静默安装和卸载)
2019-03-12
ionic4 路由跳转传值
2019-03-12
pwn题shellcode收集
2019-03-12