树的层序遍历,BFS

题目链接-来源:力扣(LeetCode)

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

例如:
给定二叉树: [3,9,20,null,null,15,7],

3

/
9 20
/
15 7
返回:

[3,9,20,15,7]

思路:

树的层序遍历,本质上是图的 BFS 算法。只需要借助一个队列即可实现。
一开始入队根节点,之后循环从队列中弹出节点进行访问。对访问到的节点,打印后将左右子节点依次入队,循环操作即可完成遍历。
时间复杂度:O(n)
空间复杂度:O(n)

实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class Solution {
public int[] levelOrder(TreeNode root) {
Queue<TreeNode> q = new LinkedList<>();
List<Integer> output = new LinkedList<>();
if (root != null) {
q.offer(root);
}
while (!q.isEmpty()) {
TreeNode cur = q.poll();
output.add(cur.val);
if (cur.left != null) {
q.offer(cur.left);
}
if (cur.right != null) {
q.offer(cur.right);
}
}
int n = output.size();
int[] ret = new int[n];
int i = 0;
for (Integer item : output) {
ret[i++] = item;
}
return ret;
}
}