题目
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:

输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1] 输出:[[1]]
示例 3:
输入:root = [] 输出:[]
提示:
- 树中节点数目在范围
[0, 2000]内 -1000 <= Node.val <= 1000
思路
在脑海中模拟一下层序遍历:先是root,然后是root的左右节点,然后是root左节点的左右节点,然后....
有点熟悉了,一个进一个出...!这不就是队列吗,bingo!
那么思路就非常简单了
(1)用双端队列存储需要访问的节点
(2)遍历双端队列,当访问到某节点时,判断其是否有左右节点,如果有,则存进队列,等待访问
(3)直至队列为空,所有节点都已访问
BUT!有问题!

原来!题目还要求了按行输出,所以在(2)里面要注意处理一下:遍历完当前队列中所有的节点就是一行
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
if not root: return []
ans, queue = [], collections.deque()
queue.append(root)
while queue:
t = []
for _ in range(len(queue)): # 按行输出,即遍历当前队列中的节点
node = queue.popleft()
t.append(node.val)
if node.left: queue.append(node.left)
if node.right: queue.append(node.right)
ans.append(t)
return ans
250

被折叠的 条评论
为什么被折叠?



