二叉树的层次遍历
创作时间:
作者:
@小白创作中心
二叉树的层次遍历
引用
CSDN
1.
https://blog.csdn.net/weixin_53564801/article/details/125749859
二叉树的层次遍历是数据结构中一个重要的算法,广泛应用于各种场景。本文将从概念、实现思路到具体代码实现,详细讲解如何使用队列实现二叉树的层次遍历。
1. 层次遍历概念
层次遍历就是逐层地,从左到右访问所有节点。如下图所示:
2. 方法实现思路
对于层序遍历,无疑是一层一层结点查找。那我们能不能找一个队列,把每一层的结点依次放入队列中,这样我们就能实现程序遍历啦。
首先创建一个队列,然后把根节点放入队列中。接着就把 queue 的头结点弹出,也就是A,放到 cur中去,并打印。此时 cur 指向 A结点
cur 设置的目的:方便我们把下一层结点结点放到队列当中。
队列特点: 先进先出。
我们判断 cur 的左结点是否为空,如果不为空就把左结点放入队列中。同时我们也要判断cur的右节点,操做相同。
每弹出一个结点,就会把该节点的左右孩子插入到队列中(左右孩子不为空的情况下!),然后弹出队列头结点。
也就是一层一层遍历,比如遍历完B后,把B的左右孩子放到C的后面,直到遍历完C后(第二层)才会遍历B的左右孩子(第三层)。
总结:
- 定义一个队列,把root根节点放入队列中。
- 弹出对头节点,并遍历打印。
- 判断当前节点的左右孩子是否为null,如果不为null,则入队。
- 检测队列,如果队列为空,则说明层序遍历结束。
层次遍历对于二叉树来说算是比较基础的一种算法,其拓展了许多。例如判断二叉树是否为满二叉树等。
大家还可以去做 leetcode 做一下这道题加以巩固:二叉树的层序遍历
3. 代码实现
import java.util.Queue;//导入队列的包
public class BinaryTree {
//内部类
static class TreeNode {
public char val;
public TreeNode left;//左孩子的引用
public TreeNode right;//右孩子的引用
public TreeNode(char val) {
this.val = val;
}
}
/**
* 创建一棵二叉树 返回这棵树的根节点
*
* @return
*/
public TreeNode createTree() {
TreeNode A = new TreeNode('A');
TreeNode B = new TreeNode('B');
TreeNode C = new TreeNode('C');
TreeNode D = new TreeNode('D');
TreeNode E = new TreeNode('E');
TreeNode F = new TreeNode('F');
TreeNode G = new TreeNode('G');
TreeNode H = new TreeNode('H');
A.left = B;
A.right = C;
B.left = D;
B.right = E;
C.left = F;
C.right = G;
E.right = H;
return A;
}
//层序遍历
void levelOrder(TreeNode root) {
if(root == null) return;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode cur = queue.poll();
System.out.print(cur.val);
if(cur.left != null){
queue.offer(cur.left);
}
if(cur.right != null){
queue.offer(cur.right);
}
}
}
public static void main(String[] args) {
BinaryTree bt = new BinaryTree();
TreeNode root = bt.createTree();
bt.levelOrder(root);
}
}
代码中树的形状,和代码结果如下:
注:
Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。
在使用时我们要导入 import java.util.Queue ;
Queue中的方法:
热门推荐
黎曼猜想显著突破!MIT、牛津新论文首次实质性改进Ingham界限
2025考研数一数二数三区别及适用对象
“鹿”字五行属什么
小白科普:什么是MAC地址及其作用解析
HRBP是什么岗位?与HR有什么区别?
伸懒腰有什么好处
接口测试如何比对数据库
如何使用手机作为证据提交
眼睛痛怎麼辦?眼睛往上看會痛、內側痛、轉動痛原因完整看
自动生产线在现代工业中的应用
PUBG罗技鼠标宏社区分享:学习顶尖玩家的设置
交通事故纠纷中的证据收集指南
三界九地图(下):何为色界无色界?为何这些天人仍无法脱离轮回
比较股票一级市场和股票二级市场的功能
为了能让你剥出完美的鸡蛋,我们一口气煮了30个蛋
久坐族 做做臀部锻炼防疼痛
基于大数据的音乐推荐系统设计与实现
石英石和硅石的区别在哪里
社交媒体如何影响青少年心理健康?
锁存器和触发器的概念及比较
移液管规范操作指南:从原理到实践的精密切量
1克黄金难买3筒球,羽毛球打不动了
杭州机场不明飞行物事件始末
4S店捆绑销售保险可以起诉吗?法律维权指南
树莓的种植与养护(从选地到丰收,让你轻松掌握树莓种植的诀窍)
脑梗来临的信号,在临床上分几个阶段
VLAN、VLAN划分的多种方法,网络工程师收藏!
广西柳城:橘园管护忙 硕果枝头满
半音阶口琴簧板厚度:从1mm到厚薄分区的演变
“腿型”一般分为这4种!选择适合自己的裤子,你也可以是腿精