目录
一、题目
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树:[3,9,20,null,null,15,7],3 / \ 9 20 / \ 15 7
返回:
[3,9,20,15,7]
提示:
节点总数 <= 1000
二、思路
使用队列先入先出的性质来实现二叉树广度优先搜索(BFS)
初始化: 新建一个队列、将root入队;
新建一个临时链表temp存放每次出队的元素;
循环结束条件:队列为空时,结束循环
1、每次循环将队列首元素记为node,将node.val取出存入temp;
2、若node的左右结点不为空,则将左右结点入队;
最后新建一个长度为temp.size()的数组res,将temp的元素遍历到res,返回res即为所求;
三、代码
class Solution {
public int[] levelOrder(TreeNode root) {
// 特殊情况
if(root == null){
return new int[0];
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
List<Integer> temp = new ArrayList<>();
while(!queue.isEmpty()) {
TreeNode node = queue.poll();
temp.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
int[] res = new int[temp.size()];
for(int i = 0; i < temp.size(); i++)
res[i] = temp.get(i);
return res;
}
}
执行结果:

ps:
之所以选择用list来作为临时存放而不是用数组、是因为新建链表无需指定长度。最后直接姐list转为数据即可;
本文介绍了一种利用队列实现的二叉树广度优先遍历算法,通过队列的先入先出特性,实现了从上到下、从左到右的节点打印。该算法适用于节点总数不超过1000的二叉树。
215

被折叠的 条评论
为什么被折叠?



