二叉树层序遍历的几种方法(Java)

本文介绍了二叉树层序遍历的两种方法,包括利用双指针判断每层最后一个节点以及使用双队列交替存储不同层级的节点,以实现对二叉树特定视角的遍历。通过对LeetCode相关题目的实践,总结了解题思路,并提供了相应的Java代码示例。
摘要由CSDN通过智能技术生成

二叉树的层序遍历是BFS的一种体现,但遇到的题中往往需要按层进行操作,也就是说需要记录每个元素属于哪一行。LeetCode中有相关的题目:LeetCode102LeetCode199。鉴于在这一点上踩过坑,特此总结如下几种按层遍历的方法:

一、双指针

通常,我们都是创建一个队列,然后将根节点root放入队列中,然后以队列不为空作为while循环的条件进行遍历。在循环体中,每次从队列中弹出一个节点,然后判断该节点的左右孩子是否为null,不为null则将其放入队列中。
双指针的大概流程如下:指针last指向上一层的最后一个节点,指针nlast随着向队列中添加的节点变化,令cur指针指向当前弹出的节点。在向队列中添加节点时,判断cur是否等于last,即当前弹出的节点是否等于上一层的最后一个节点。如果是,则将last更新为nlast。这是因为nlast是随着添加节点变化的,而添加的节点是cur的孩子,如果此时的cur等于last,说明此时添加的节点是上一层的最后一个节点的孩子,也就是本层的最后的节点。
做动态图比较麻烦,时间并不是很充裕,因此只能文字说明。结合如下代码可能会更容易理解:

public List<List<Integer>> printByLayer(TreeNode root) {
   
	List<List<Integer>> res = new ArrayList<>();
	if(root == null) return res;	//记得判断输入为null的时候
	Queue<TreeNode> queue = new LinkedList<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值