「这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战」
前言
力扣第102题 二叉树的层序遍历
如下所示:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
1 | markdown复制代码 3 |
返回其层序遍历结果:
1 | csharp复制代码[ |
一、思路
题目中就一个要求:返回层序遍历结果
既然要按树的深度(层数)从左至右获取结果,所以我们至少要知道一个信息:当前层数有多少个节点。而当前层数的节点,是由前面的节点决定的。
所以我们需要在遍历当前的节点时,将不为空 null
的左孩子和右孩子加入下一层节点 nextLevel
,提供给下一次遍历。
综上所述,实现的步骤只需要两步:
- 遍历当前层的节点,将节点值加入到当前层结果集,并依次将各节点不为空的
左孩子
和右孩子
加入到下一层的节点 - 只要下一层节点不为空,则重复第一步的过程
举个例子
在这里我们可以使用 递归 或者 遍历 来实现,这两种实现代码都会在实现代码中给出示例。在这里我们使用 递归 来举个例子:
一些变量说明:
List<TreeNode> currentLevel
:当前层的不为空的节点List<TreeNode> nextLevel
:下一层不为空的节点List<Integer> temp
:当前层的结果集
以示例中的 [3,9,20,null,null,15,7]
作为例子
- 根节点不为空,遍历第一层节点
currentLevel = [3]
,可获得结果集temp = [3]
,再将左孩子右孩子加入下一层节点nextLevel = [9, 20]
- 遍历第二层
currentLevel = [9, 20]
,可获得结果集temp = [9, 20]
,再将他们的左孩子和右孩子加入下一层节点nextLevel = [15, 7]
- 遍历第三层
currentLevel = [15, 7]
,可获得节点集temp = [15, 7]
。当前层节点中都没有左右孩子了,故结束遍历 - 返回结果
ret = [[3], [9, 20], [15, 7]]
即可
二、实现
实现代码
实现代码与思路中保持一致,下方为递归和遍历两种实现方式
递归
1 | java复制代码List<List<Integer>> ret = new ArrayList<>(); |
遍历
1 | java复制代码public List<List<Integer>> levelOrder1(TreeNode root) { |
测试代码
1 | java复制代码public static void main(String[] args) { |
结果
三、总结
感谢看到最后,非常荣幸能够帮助到你~♥
如果你觉得我写的还不错的话,不妨给我点个赞吧!如有疑问,也可评论区见~
本文转载自: 掘金