题目:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
/**
- 通过观察返回的结果,可以直到是大集合嵌套着小集合,需要两个集合;
- 设置一个队列queue,来存放每一层的元素,并设置一个int型变量count,来记录这一层有几个元素;
- 每遍历完一层,就把队列里这一层的元素给poll掉,并将其加入到集合中; poll和pop区别,pop null 抛异常
- 再通过判断之前队列里存放的值的左节点和右节点是否为空来将下一层的元素加入到queue中(因为二叉树只有左节点和右节点);
- 重复循环,直到队列为空为止。
*/
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resultList = new ArrayList<>();
if(root == null)
return resultList;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
//将每层的节点放入Queue
while(!queue.isEmpty()){
List<Integer> levelList = new ArrayList<>();
int count = queue.size();
for(int i=0;i<count;i++){
TreeNode node = queue.poll();
levelList.add(node.val);
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
resultList.add(levelList);
}
return resultList;
}