题目分析:
将二叉树按层次分组顺序遍历
基本思路:
可以利用队列先进先出的基本思想和数组变量嵌套写法,来分组顺序遍历二叉树
按层遍历,将每一层的数值取出放在一个小list当中,最后拼成一个大list
具体思路在代码部分有详细注释
补充:
补充一些关于队列(Queue)的用法(加黑的是本题用到的):
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
代码实现:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
//先判断这个二叉树根节点是否为空
if(root == null){
return new ArrayList<>();}
//构建一个数组变量的嵌套写法,就是在list里面存list
List<List<Integer>> bb = new ArrayList<>();
//构造一个队列
Queue<TreeNode> queue=new LinkedList<>();
//把根节点存入队列
queue.add(root);
//当队列不为空时
while(!queue.isEmpty()){
//size() 方法用于返回这个集合中元素的个数
int count = queue.size();
//构建内置链表aa
List<Integer> aa = new ArrayList<>();
while(count>0){
//将链表中的元素取出,并将值付给aa
TreeNode node = queue.poll();
aa.add(node.val);
//向左右子节点遍历
if(node.left != null){
queue.add(node.left);
}
if(node.right != null){
queue.add(node.right);
}
count--;
}
//将每一次的aa存入bb
bb.add(aa);
}
return bb;
}
}