![9cef39b0e001d2310600ac616cc9b0b7.png](https://i-blog.csdnimg.cn/blog_migrate/ddba6aa31eabcfd6c6c5b8b35213d8f6.jpeg)
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7
![f5d5cf469967746ae47a2a9023d224ac.png](https://i-blog.csdnimg.cn/blog_migrate/2bc6cd56d6afd8418d4c6405eede4825.png)
解题思路及代码
使用队列进行层次遍历
步骤为:
- 初始化:一个队列 Queue<TreeNode> , 将 root 节点入队列 queue;一个动态数组 ArrayList<Interger> ret,存储打印的结点数值。
- 如果队列不空,做如下操作:
- 弹出队列头,保存为node,动态数组 ret 中增加 node 的数值,然后将node的左右非空孩子加入队列
- 做2,3步骤,知道队列为空
图示:
![569cf5a7e8c19562d4174844782797f7.png](https://i-blog.csdnimg.cn/blog_migrate/dd3a2861bbe22aebc254066038be47d8.jpeg)
代码如下:
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
ArrayList<Integer> ret = new ArrayList<>();
queue.add(root);
while (!queue.isEmpty()) {
int cnt = queue.size();
while (cnt-- > 0) {
TreeNode t = queue.poll();
if (t == null)
continue;
ret.add(t.val);
queue.add(t.left);
queue.add(t.right);
}
}
return ret;
}
queue.poll()方法返回队列中的第一个元素,并在队列中删除返回的对象。如果没有元素返回null。