@author = YHR | 代码原创 | 创作不易!转载请标明来源!
题目描述
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是:
题目重点
- 同一层从左到右按顺序存储;
- 每一层,对应于 数组一个维度。
- 每一层的所有结点都存在数组的同一维度里;
思路关键词: 层序遍历 – bfs – 队列 – 层数计数
要注意的有几点:
- 与普通BFS层序遍历,每次结点入队不同,这里入队的是另一种结构: 【结点(node),层数(int)】 (root 结点的层数默认为0。)
- 每次队列弹出队首元素parent,他的左孩子如果存在,左孩子的层数一定等于parent层数+1,也就是层数等于parent[1]+1; 右孩子同理;
- parent 存入order数组里,根据parent[1]记载的层数,确认存在order的第几维度里,如果order的维度(len(order)-1) < parent[1],order新增一个维度。
python代码
class Solution:
def levelOrder(self , root):
# write code here
if root is None:
order = []
else:
order = [[]]
queue = []
queue.append([root, 0])
# 第一项记载点, 第二项记载当前点所在的层数
while len(queue) > 0:
parent = queue.pop(0)
# 比较当前层数是否超过order维度
if len(order)-1 >= parent[1]:
# 没超过,存入对应维度
order[parent[1]].append(parent[0].val)
else:
# 超过,新增一维,用于存储parent
order.append([])
order[parent[1]].append(parent[0].val)
if parent[0].left is not None:
queue.append([parent[0].left, parent[1]+1])
if parent[0].right is not None:
queue.append([parent[0].right, parent[1]+1])
return order