二叉树的逐层遍历--java实现

本文详细探讨了如何使用Java实现二叉树的逐层遍历。针对两个不同的需求,作者提供了两种思路的分析,并给出了相应的代码实现。
摘要由CSDN通过智能技术生成

需求一:

    逐层遍历二叉树并输出,每一层占一行。

分析:

思路一:

    1、逐层遍历二叉树也是BFS遍历二叉树,因此数据结构选择队列。
    2、需要用两个变量存储当前层待遍历的节点个数以及下一行的节点个数。
    3、将头结点加入队列尾,当队列不是空的,就移除队列头部元素并输出,并将其儿子节点加入队列尾,当前层待遍历节点个数减一,更新下一层节点个数。
    4、当当前层待遍历节点个数为0时,说明已经遍历了一行,这时就需要换行。

思路二:

    思路一中定义了两个变量,存储当前行待遍历节点个数以及下一层节点个数,我们也可不用这两个变量。因为每次判断队列是否是空的时候,此时队列长度就是当前层的节点个数,记录该值,即为当前层的遍历次数,遍历结束即换行。

需求二:

    逐层遍历二叉树,将每一层的节点值存到集合中,最后返回包含每一层节点值的集合。

分析:

思路一:

    同需求一中的思路一,定义两个变量记录当前层和下一层节点个数。创建一个List集合,用于存储每一层的节点值,当该层遍历结束,将该层List集合添加到结果集合中,然后更新两个变量值,并且清空List集合

思路二:

    同需求一中的思路二,不用定义两个变量。每次判断是否为空的时候,创建List集合,用变量记录此时队列长度,即当前层应该遍历的节点个数,遍历结束意味着已经遍历了当前行,将该List集合添加到结果集合中即可

代码:

import java.util.*;

class BinTree{
	//表示二叉树的字符串数组
	private String[] str;
	//表示二叉树的List集合
	private List<Node> list;

	//构造函数
	//传入字符串数组
	BinTree(String[] str){
		this.str = str;
	}

	//二叉树节点内部类
	class Node{
		int val;
		Node left;
		Node right;

		Node(int val){
			this.val = val;

			this.left = null;
			this.right = null;
		}
	}

	//创建二叉树
	public void createBinTree(){
		list = new LinkedList<Node>();

		//遍历字符串数组,将字符串转成相应的节点
		for(String s : str)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值