二叉树的分层遍历

本文介绍如何实现二叉树的分层遍历,通过使用队列进行广度优先搜索,逐层将节点推入并弹出,换行打印节点。详细讲解了换行打印的逻辑,即根据队列长度控制每行节点的遍历,并在遍历完一行后重新计算队列长度,进行下一行的遍历。

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

二叉树的分层遍历


二叉树的分层遍历, 换行打印
下面的代码将解释如何实现换行打印。

  1. 分层遍历使用队列queue,按层次将节点推入队列,并在弹出时将节点的左右节点推入队列。
  2. 换行打印使用for循环,定义n=队列长度,遍历该行的所有节点后,跳出for循环,打印换行,再重新赋值队列长度n,重新进入下一行的for循环
//定义Treenode
class Treenode{
	int val;
	Treenode left;
	Treenode right;
	//构造函数
	Treenode(int val){
	this.val=val;
	left=null;
	right=null;
	}
}
//遍历方法
public static void LevelTraverse(Treenode root){
	Queue<Treenode> queue=new LinkedList<>();
	queue.offer(root);//将根节点推入队列,此时队列长度为1
	//特殊判断,如果传入的节点为空,直接退出
	if(root==null)
	return;
	//用isEmpty()判断队列非空条件
	while(!queue.isEmpty()){
	int n=queue.size(); //定义n=队列长度,此时n=1。第一回合for循环结束后将重新赋值
	for(int i=0;i<n;i++){
	//第一回合n=1,所以for循环只执行一次,打印二叉树的根节点root
			Treenode cur=queue.poll(); //定义指针cur,将弹出的节点赋给指针
			System.out.print(cur.val+" "); //将弹出的节点打印出来
			if(cur.left!=null){
				queue.offer(cur.left); //如果弹出节点有左节点,则将左节点推入队列
			}
			if(cur.right!=null){
				queue.offer(cur.right);
			}
		}//for循环结束. 第一回合结束时,根节点root弹出队列,根节点的左右节点(如果存在)将会推入队列,
		//此时队列长度为2,下一回合for循环将执行两次,打印第二层的2个节点
		System.out.println();
	}
}

总结


每次将第前一行的节点打印并且弹出后,都会将下一行的所有子节点推入队列。因此每当一回合的for循环结束时,队列长度将被重新赋值为下一行子节点的个数。因此,打印换行的代码只需插入到for循环之后。

赋值队列长度n—>for循环执行n次打印n个节点—>打印换行—>赋值队列长度n…依次循环。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值