
leetcode 102 剑指Offer 32 二叉树的层次遍历
初始化一个队列:将树的根节点作为队列的初始元素。 循环处理队列:不断从队列中取出元素,处理其子节点添加到队列中。 记录遍历结果:每次处理一个节点时,将其值记录下来,形成层序遍历的结果列表。 创建一个队列实例,接收树节点。 将根节点加入队列。 初始化一个结果列表,用于存储遍历的节点值。 确定队列的大小,只有当队列不为空时,才继续进行循环。 对于每个队列中的节点,处理它并将其子节点依次加入队列中。 在处理每个节点时,将其值添加到结果列表中。 初始化变量:创建结果列表 处理根节点:如果根节点为空,直接返回空列表,否则将根节点加入队列。 循环处理队列:在队列不为空时,处理当前队列中的所有节点。 记录当前层节点值:使用 加入子节点:将左、右子节点(如果存在)加入队列。
发布日期:2021-05-13 22:23:25
浏览次数:11
分类:精选文章
本文共 1772 字,大约阅读时间需要 5 分钟。
树状结构的层序遍历算法实现
树状结构的层序遍历是一种常见的遍历算法,通过队列数据结构可以高效地实现。这种算法的思路相对简单,适合处理树状结构的遍历问题。以下是实现该算法的详细说明。
思路概述
层序遍历属于广度优先搜索的一种,用队列来实现可以保证先处理树的根节点,再处理其子节点的顺序。整个过程可以分为以下几个步骤:
这种方法特别适合对于树的节点数目不确定的情况,能够自动处理不同深度的树结构。
###具体实现步骤
队列操作的关键
队列的使用是实现层序遍历的核心。队列支持 FIFO(先进先出),能够确保我们能够按照从左到右的顺序处理每一个节点的子节点。这一点对于层序遍历非常重要。
这种方法的时间复杂度为 O(N)(N为树的总节点数),因为每个节点都会被处理一次,并且只会被访问一次。
###代码分析
以下是层序遍历的代码实现示例:
import java.util.*;public class offer32 { public ListlevelOrder(TreeNode root) { List ans = new LinkedList<>(); LinkedList queue = new LinkedList<>(); if (root == null) { return ans; } queue.addLast(root); while (!queue.isEmpty()) { int size = queue.size(); List currentLevel = new LinkedList<>(); for (int i = 0; i < size; i++) { TreeNode node = queue.pollFirst(); currentLevel.add(node.val); if (node.left != null) { queue.addLast(node.left); } if (node.right != null) { queue.addLast(node.right); } } ans.add(currentLevel); } return ans; }}
代码解释
ans
用于存储每一层的节点值,队列 queue
用于存储待处理的节点。currentLevel
列表记录当前层的节点值,将其添加到结果列表 ans
中。这种方法确保每个节点按照其出现在树中的层数顺序被处理,并且每个节点只会被处理一次,保证了算法的高效性和正确性。
总结
层序遍历算法通过队列数据结构实现,能够高效地遍历树状结构。在实际编码中,可以根据具体树的结构进行适当调整,确保算法的正确性和性能。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月27日 11时28分51秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
菱形继承
2019-03-09
RTL设计- 多时钟域按顺序复位释放
2019-03-09
斐波那契数列两种算法的时间复杂度
2019-03-09
int main(int argc,char* argv[])详解
2019-03-09
【Android踩过的坑】7.Android Studio 点击启动项目时进入调试模式
2019-03-09
【Android小技巧】1.快速查看SDK对应的API Level
2019-03-09
【自学Flutter】4.1 Material Design字体图标的使用(icon)
2019-03-09
C++清空队列(queue)方法
2019-03-09
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
【二叉树】已知后序与中序求先序
2019-03-09
数组范围的动态扩容
2019-03-09
如何选择三种验证类型的https证书
2019-03-09
thinkphp使用163/126邮箱发送
2019-03-09
解决Nginx 404 not found问题
2019-03-09
计算机网络之第三章笔记--数据链路层
2019-03-09
创建型模式之简单工厂模式实例及代码操作
2019-03-09
广东外语外贸大学第三届网络安全大赛Writeup
2019-03-09
跟着燕青学分布式事务控制技术方案
2019-03-09
Activiti视频分享
2019-03-09