题目:
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
5 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路:
当访问根结点 3 的时候需要把它的左右孩子结点 [9, 20]先保存起来,访问[9, 20]把它两个结点的左右孩子结点保存起来[null, null, 15, 7], 访问[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 not root: # root为空时直接返回[]
return []
res = [] # 返回的最终结果
cur_nodes = [root] # 当前访问层
next_nodes = [] # 下一层需要访问的
res.append([i.val for i in cur_nodes]) # 先把第一层的值放入res中
while cur_nodes or next_nodes: # 当前结点或下一层结点不为空
for node in cur_nodes: # 当前结点的所有孩子都加入next_nodes
if node.left:
next_nodes.append(node.left)
if node.right:
next_nodes.append(node.right)
if next_nodes: # 下一层结点不为空时加入res
res.append(
[i.val for i in next_nodes]
)
cur_nodes = next_nodes # 更新当前结点为next_nodes
next_nodes = [] # 下一层结点置空
return res