二叉树层序遍历,即按照层数从左到右依次遍历结点。需要注意的是,不同于前中后序遍历,层序遍历不仅需要关注层与层之间的结点出现顺序,还需关注同一层内结点的先后顺序。此时,我们需要一个能记录当前层所有结点的队列,其次我们需要根据本层的结点记录下一层的结点队列,最后我们需要在遍历每一层时记录每一层每一个结点的情况。因此,我们需要三个队列(或数组),当然我们还需要一个额外的数组记录遍历结果。
示例1:
以示例1为例,给出层序遍历的代码:
class Solution:
def levelOrder(self, root):
if root is None:
return []
queue = [root]
next_queue = []
level = []
result = []
while queue:
for root in queue:
level.append(root.val)
if root.left is not None:
next_queue.append(root.left)
if root.right is not None:
next_queue.append(root.right)
result.append(level)
level = []
queue = next_queue
next_queue = []
return result
注意:
需要区别queue和level,前者存储当前层数所有即将遍历的结点,而后者则针对每一层每一个结点的累积记录,每遍历完一层中的某个结点,就将该结点记录到level中方便result的添加。