二叉树的层次遍历
创作时间:
作者:
@小白创作中心
二叉树的层次遍历
引用
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中的方法:
热门推荐
MSDS安全指南:化学品使用与管理的必备手册
心肌酶谱怎么看才靠谱?如何鉴别CKMB升高是否由心肌梗死造成?
阿根廷公共服务费一年暴涨5倍!民众生活压力倍增
现实与神话的边界:科学与幻想的对话
如何使用OBS进行录屏教程分享?遇到问题怎么办?
茶包放太久會變質嗎?來看看過期茶包的秘密!
【以案释法】借款人逾期不还款法院如何判决?
完全归纳推理在数学证明中的重要性与应用
员工垫付社保是否可以向公司追偿?
痣与健康:如何辨别痣的良恶性及预防黑色素瘤
名字也能看出武侠大师的风格?金庸单字,古龙叠字,谁更胜一筹?
不按规定行驶是什么意思
贷款买房月供占收入的多少?看完就清楚了
如何让学生学得快、忘得慢?脑科学专家的教学建议和方法,用起来!
甲状腺对身体有什么影响
近视眼手术的利与弊
人工智能提升知识管理的5种方式
同为兴唐名将,郭子仪和李光弼的人生结局为何不同?逆商决定命运
房贷首付比进入“15%时代”,多个省份房地产新政落地
如何查询房产信息?这种查询方法有哪些实用技巧?
法律之盾 抵御外来物种入侵
东莞“硬实力”突围:制造业大市的转型密码
双男主刑侦剧全古装剧的法律叙事与法治精神
民间借贷的法律风险与防范
张雪峰评西安电子科技大学:成电与西电差距越来越大?
工伤死亡有哪些赔偿标准
一天一顿饭的危害有多大
赏花吟韵:中国古诗词里的花卉之美
产品经理的职业生涯规划是怎么样的?
如何预防头痛的发生