「这是我参与2022首次更文挑战的第15天,活动详情查看:2022首次更文挑战」
题目
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
题目分析
这道题同样也是考察二叉树的层序遍历,和上篇文章的区别不大,在这里就不做过多的分析了,只是输出的形式有所不同。
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> result = new ArrayList<>();
if (root!=null) {
queue.add(root);
}
while (!queue.isEmpty()) {
List<Integer> temp = new ArrayList<>();
for (int i = queue.size();i>0;i--) {
TreeNode treeNode = queue.poll();
temp.add(treeNode.val);
if (treeNode.left!=null) {
queue.add(treeNode.left);
}
if (treeNode.right !=null) {
queue.add(treeNode.right);
}
}
result.add(temp);
}
return result;
}
}
这是我用java实现的功能,每个题都用不同的解法和写法,我大体整理了一下自己的思路然后就写了,也没有再想其他的方法,如果你有更好的解法,欢迎和我留言,我们一起进步,一起学习数据结构,共同进步,通过这道题能更熟悉二叉树的层序优先遍历的操作。
小知识
对于二叉树的层序遍历我就不做过多的介绍了,这里说一下java的类与类之间的关系,常见的类关系有依赖,聚合和继承,被final修饰的域要在构造器执行的时候设置域的值,否则后面的操作不会对这个域进行修改。静态域和静态方法通过static进行修饰,静态域属于类,而不是属于某个实例,一个类可以有很多个实例,但只有一个静态域。如果一个类中多个方法有相同的名字不同的参数,这就是重载。方法的方法名和参数类型称为方法签名。返回类型不是方法签名一部分,所以方法名相同参数类型相同但返回类型不同,这不是重载
总结
这篇文章同样也是解决了二叉树的层序遍历,如果有不当之处,欢迎指正。