题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)
示例
提交的代码
import java.util.List;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root==null)return result;
int curCount=1;
int nextCount=0;
Deque<TreeNode> queue=new LinkedList<>();
TreeNode cur=root;
queue.offer(cur);
List<Integer> list= new ArrayList<>();
while(!queue.isEmpty()){
//队首元素出队
cur=queue.poll();
list.add(cur.val);
if(cur.left!=null){
queue.offer(cur.left);
nextCount++;
}
if(cur.right!=null){
queue.offer(cur.right);
nextCount++;
}
if(list.size()==curCount){
result.add(list);
curCount=nextCount;
nextCount=0;
list = new ArrayList<>();
}
}
return result;
}
}
学习到的东西
上面的代码是以前记住的一种写法,实现起来略显繁复,需要统计当前层的数量和下一层的数量,写的时候都不大好搞。
换一种写法,代码好写一点。
import java.util.List;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if(root==null)return result;
Deque<TreeNode> queue=new LinkedList<>();
TreeNode cur=root;
int curCount=0;
queue.offer(cur);
while(!queue.isEmpty()){
List<Integer> list=new ArrayList<>();
curCount=queue.size();
while(curCount>0){
cur=queue.poll();
list.add(cur.val);
if(cur.left!=null)queue.offer(cur.left);
if(cur.right!=null)queue.offer(cur.right);
curCount--;
}
result.add(list);
}
return result;
}
}