给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1] 输出:[[1]]
示例 3:
输入:root = [] 输出:[]
之前写过一篇文章中具体的讲了二叉树的层序遍历,当时返回类型是void,即只是遍历了没有返回。(原文链接:二叉树的最大深度-优快云博客)
该题的返回类型是list<list<Integer>>类型([[3],[9,20],[15,7]])我们现在来分析一下:层序遍历需要用到队列(先进先出);在队列不为空的时候进行循环遍历;刚开始时(若root!=null),将根节点root加入到队列queue中;那么在这里我们需要创建一个list<Integer>集合来存储这一层元素,即queue中此时存放的元素就是这一层的节点;,我们只需要遍历queue队列即可;获取到其中元素之后将其.val值加入到list中,然后判断其左右节点;访问玩queue中元素之后需要将其弹出;并将此时list<integer>加入到list<list<Integer>>中,继续进行循环
pubLic List<List<Integer>> levelOrder(){
List<List<Integer>> list=new ArrayList<List<Integer>>();
//进行判断
if(root==null) return list;
//创建队列
Queue<TreeNode> queue =new LinkedList<>();
queue.offer(root)//将根节点加入
while(! queue.isEmpty()){ //队列不为空判断
List<Integer> level=new ArrayList<>(); //用来存储每一层节点的值
int n=queue.size();// queue中存放的元素就是这一层的所有节点,所以获取queue的长度,依次遍历每一个元素
for(int i=0;i<n;i++){
if(queue.peek().left!=null)
queue.offer(queue.peek().left);
if(queue.peek().right!=null)
queue.offer(queue.peek().right);
TreeNode node=queue.poll()//弹出队首元素
level.add(node.val);
}
list.add(level);//将每一层的元素加入
}
return list;
}