题目描述:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
思路:
如果只是直接打印出层序遍历的结果,那么直接用一个队列就行了。题目要求打印出每一层的结点,那么我们需要记录每一层的结点数量,用两个变量直接存一下就行了。
代码:
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) {
return ans;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root);
int currCount = 1; // 记录当前层的结点数
int nextCount = 0; // 记录下一层的结点数
List<Integer> list = new ArrayList<Integer>();
while(!queue.isEmpty()){
TreeNode curr = queue.poll();
list.add(curr.val);
currCount--; // 每从队列中弹出一个结点,当前层结点数减一
if (curr.left != null) {
queue.offer(curr.left);
nextCount++;
}
if (curr.right != null) {
queue.offer(curr.right);
nextCount++;
}
if (currCount == 0) { // 如果当前层结点数为0,那么说明这一层已经遍历完了
currCount = nextCount;
nextCount = 0;
ans.add(list);
list = new ArrayList<>();
}
}
return ans;
}
}