题目描述:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
解题思路:
采用一个临时数组存放每一层的节点,将新添加的节点放入临时数组,当queue为空时,说明这一层访问结束,将这一层的节点以列表的形式存入返回值中,并将临时数组赋给queue,这样queue中每次存放的都是一层的数据
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
queue=[root]
res,res1,tmp=[],[],[]
while queue:
node=queue.pop(0)
res1.append(node.val)
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
if not queue:
res.append(res1)
queue=tmp
tmp,res1=[],[]
return res
也可以不用临时数组,直接将下一层的节点添加到queue末尾,用当前queue长度控制每一层。当前层打印循环: 循环次数为当前层节点数(即队列 queue 长度);