太久没写层序遍历(BFS),还写复杂了。。居然用递归+迭代协作完成,这不纯纯多此一举吗?
主要是最开始把遍历一层的队列想复杂了,其实我们在开始处理某层前算出该层的节点数量(len(queue))即可。详细注释的代码如下:
class Solution(object):
def levelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root: #空树,直接返回空列表
return []
queue = []
ans = []
queue.append(root) #根节点入队
while queue: #队列非空
node_num = len(queue) #当前层需要pop的节点
new_row = [] #当前层待输出的值
for i in range(node_num): #对当前层的节点依次出队处理
front = queue.pop(0) #队首元素出队
new_row.append(front.val) #将其值放入new_row
if front.left: #左节点若不为空,入队
queue.append(front.left)
if front.right: #右节点若不为空,入队
queue.append(front.right)
ans.append(new_row)
return ans