题目描述:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,1
2
3
4
5 3
/ \
9 20
/ \
15 7
返回其层序遍历结果:1
2
3
4
5[
[3],
[9,20],
[15,7]
]
链接:
https://leetcode-cn.com/problems/binary-tree-level-order-traversal
题目分析
我们知道,二叉树的层序遍历跟广度优先搜索的过程是一样的,所用到的数据结构都是队列。每次将队头出列,并将其左右子结点加入队尾,这样即可以按照层次的顺序得到二叉树的结果。但是阅读示例可以发现,返回的结果是二维的数组,不同层次之间需要隔开,怎么分隔呢?我们可以在每一层的开始先检查队列中的元素个数,然后按照这个数目进行循环,循环结束也即该层遍历结束。下一层的时候重复这个过程即可,直到队列为空则遍历结束。
1 | class Solution { |
时间复杂度:$O(n)$,其中 $n$ 为二叉树的结点数。所有结点各入队一次出队一次。
空间复杂度:$O(n)$,其中 $n$ 为二叉树的结点数。队列的最大长度为 $n$。