JAVA 二叉树的层序遍历

本文深入探讨了JAVA中二叉树的层序遍历方法,通过实例解释了levelorder方法的工作原理。首先,当输入root节点1时,输出1。接着,将2、3加入队列并输出2。随后,将4、5、6、7加入队列并输出3。如果只有三层,那么后续输出4,最后输出5、6、7,完成层序遍历。文章还提到了快速建立二叉树并进行层序输出的步骤,包括创建二叉树类、快速读取类、层序输出方法以及构建二叉树的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.Queue;
import java.util.LinkedList;

class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
    }
}

public class Main {
	//levelOrder创建层序遍历方法
    public static void levelOrder(TreeNode root) {
        if (root == null) return;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);//offer() 方法用于将元素插入到队列中
        
        while (!queue.isEmpty()) {//当队列不为空时
            TreeNode node = queue.poll();
            //queue.poll() 是从队列 queue 中移除并返回队列的头部元素。第一次执行时,将根节点取出。
            System.out.print(node.value + " ");

            if (node.left != null) {
                queue.offer(node.left);
            }
            if (node.right != null) {
                queue.offer(node.right);
            }
        }
    }

    public static void main(String[] args) {
        // 构造一个示例二叉树
        TreeNode root = new TreeNode(1);
        root.left = new TreeNode(2);
        root.right = new TreeNode(3);
        root.left.left = new TreeNode(4);
        root.left.right = new TreeNode(5);
        root.right.left = new TreeNode(6);
        root.right.right = new TreeNode(7);

        System.out.println("层序遍历结果:");
        levelOrder(root);//调用层序方法
    }
}

关于如何理解这个levelorder方法:

例如我们输入1作为root

第一次那么TreeNode node = queue.poll();这个node相当于一个tep,此时queue中只有root,那么输出root的value即1。

第二次,查看root的子节点是否为空,例如其分别为2、3,那么将2、3载入queue,接着输出2 。

第三次,检查2、3的子节点,例如为4、5、6、7,然后将其载入queue,输出3 。

第四次,假设我们只有三层,那么输入4,然后两个if就都不运行了。

第五第六第七次,输出5、6、7,层序遍历完成


深入二叉树层序遍历(快速建立二叉树并层序输出)

通常我们不会使用如上那样的办法去创建一个二叉树

快速建立二叉树并层序输出 可以分为几个部分

创建一个二叉树类

创建一个快读类

写一个层序输出方法

写一个创建二叉树方法

import java.util.Queue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.LinkedList;

class TreeNode{
	int value;
	TreeNode left;
	TreeNode right;
	TreeNode(int value){
		this.value = value;
	}
}
public class Main{
	public static void levelOrder(TreeNode root) {
		if(root==null)return;
		
		Queue<TreeNode> queue = new LinkedList<TreeNode>();
		queue.offer(root);
		
		while(!queue.isEmpty()) {
			TreeNode node = queue.poll();
			System.err.print(node.value);
			if(node.left!=null) {
				queue.offer(node.left);
			}
			if(node.right!=null) {
				queue.offer(node.right);
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/7e7a43c9018c39f441aae44202a6e1a9.png)

 

![img](https://img-blog.csdnimg.cn/img_convert/941ab3800d6e16defcc75ae423810f74.png)

![img](https://img-blog.csdnimg.cn/img_convert/46506ae54be168b93cf63939786134ca.png)

![img](https://img-blog.csdnimg.cn/img_convert/252731a671c1fb70aad5355a2c5eeff0.png)

![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)

![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)**

<img src="https://img-community.csdnimg.cn/images/fd6ebf0d450a4dbea7428752dc7ffd34.jpg" alt="img" style="zoom:50%;" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值