题目:
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
思路:
用2 or 3个列表,这里解释用2个列表(输出不分层)的做法。
res列表存放最终结果
queue列表存放当前遍历层的节点
从root开始遍历,初始queue=[root]
需要①queue[0]节点的值存入res列表②将queue[0]节点 删除
若当前节点有左子树,将其存入queue
若当前节点有右子树,将其存入queue
此时queue为下一层,接下来:对下一层进行遍历
代码A:
将打印结果 按顺序存在一个列表中
输入:[3,9,20,null,null,15,7]
输出:[3,9,20,15,7]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root is None:
return None
queue=[root]
res=[]
while queue:
node=queue.pop(0)
res.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return res
代码B:
输入:[3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if root is None:
return []#如果写return None,leetcode会报错
queue=[root]#存放当前遍历层的节点,当指针用,连接到下一层
res=[]#存放最终结果
while queue:
l=len(queue)#l为当前遍历层的节点数量
temp=[]#存放当前遍历层的节点的值
for i in range(l):#按序对当前遍历层的每一个节点进行操作
cur=queue.pop(0)#把第一个即将加入列表的节点 压出栈
temp.append(cur.val)#该节点的值存入列表
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
res.append(temp)#当前层 已经遍历完了,把存有当前层val的列表,存入res列表中(有点绕,因为结果要求是嵌套列表),下一步,出for循环,仍在while循环中,开始遍历下一层
return res#整个二叉树都遍历完了,返回最终res