题目
题目描述
给你二叉树的根节点 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
题解
解题思路
为了实现二叉树的层序遍历(广度优先搜索),我们可以使用队列数据结构来帮助我们逐层访问每个节点。具体步骤如下:
- 如果根节点为空,直接返回空列表。
- 初始化一个队列,并将根节点加入队列中。
- 开始循环处理队列中的节点,直到队列为空:
- 对于每一层,记录当前队列的长度(即该层的节点数)。
- 初始化一个临时列表来存储当前层的所有节点值。
- 遍历当前层的所有节点:从队列中取出节点,记录其值,并将其非空的左右子节点依次加入队列。
- 将当前层的节点值列表添加到结果列表中。
- 返回结果列表。
python实现
下面是 Python 实现代码:
def levelOrder(root: TreeNode):
if not root:
return []
result = []
queue = deque([root])
while queue:
level_size = len(queue)
level_nodes = []
for _ in range(level_size):
node = queue.popleft()
level_nodes.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level_nodes)
return result
解释
- TreeNode 类:定义了一个二叉树节点类,包含节点值
val、左子节点left和右子节点right。 - levelOrder 函数:实现了二叉树的层序遍历。
- 首先检查根节点是否为空,如果为空则直接返回空列表。
- 使用双端队列
deque来作为辅助队列,首先将根节点加入队列。 - 进入主循环,每次循环处理一层节点:
- 记录当前层的节点数量
level_size。 - 创建一个空列表
level_nodes来保存当前层所有节点的值。 - 循环
level_size次,每次从队列中取出一个节点,记录它的值,并将它的左右子节点(如果存在)加入队列。 - 将当前层的节点值列表
level_nodes添加到结果列表result中。
- 记录当前层的节点数量
- 最后返回包含所有层节点值的结果列表
result。
这种方法可以有效地完成二叉树的层序遍历,并且时间复杂度为 O(n),其中 n 是树中节点的数量,因为每个节点都会被访问一次。空间复杂度主要取决于队列的大小,在最坏的情况下(完全平衡的二叉树),队列中最多会包含 N/2 个节点,因此空间复杂度为 O(n)。
提交结果

4713



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



