📅  最后修改于: 2023-12-03 15:42:17.719000             🧑  作者: Mango
给定一棵二叉树,按照层次遍历的顺序依次打印出每个结点的值。每一层打印到一行。
def print_level_order(root: TreeNode) -> List[List[int]]:
pass
root
(树的根结点):二叉树的结点,类型为TreeNode
。TreeNode
结构如下所示。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
result
(返回值):存储按层次遍历的结果(每层为一个列表),类型为List[List[int]]
。root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
print(print_level_order(root))
输出:
[[3], [9, 20], [15, 7]]
层次遍历是一种广度优先搜索(BFS)的算法,可以使用队列来实现。我们一层层地遍历整棵树,把每一层的结点添加到队列中。然后遍历队列中的元素,将每次取出的元素的值存储到当前层的列表中。当队列为空时,遍历结束。
from typing import List
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def print_level_order(root: TreeNode) -> List[List[int]]:
if not root:
return []
queue = [root] # 存储待遍历的结点
result = [] # 存储层次遍历的结果
while queue:
level_list = [] # 存储当前层的结点值
level_size = len(queue) # 当前层结点的个数
for i in range(level_size):
node = queue.pop(0)
level_list.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(level_list)
return result
时间复杂度:$O(n)$,其中n为二叉树中结点的个数。
空间复杂度:$O(m)$,其中m为二叉树的最大宽度。在最坏情况下,队列中的元素个数可以达到$\frac{m}{2}$,即树的倒数第二层的结点数。