返回
剑指 Offer 32 - 从上到下打印二叉树 III:遍历之美的层序印迹
闲谈
2023-12-30 20:03:19
算法解析:逐层递进,左右交替
从上到下打印二叉树 III 的算法思想并不复杂,其核心在于分层遍历二叉树,并交替改变每一层的打印方向。具体步骤如下:
-
初始化:
- 创建一个队列
queue
来存储要打印的节点。 - 创建一个布尔变量
direction
来指示当前层的打印方向,初始值为true
(从左到右)。
- 创建一个队列
-
层序遍历:
- 将二叉树的根节点入队。
- 循环遍历队列,直到队列为空。
- 在每次循环中:
- 从队列中取出所有节点并按当前层的打印方向打印它们的
val
值。 - 将这些节点的子节点入队,注意左右子节点的入队顺序。
- 切换
direction
的值,以改变下一层的打印方向。
- 从队列中取出所有节点并按当前层的打印方向打印它们的
-
打印完成:
- 循环结束时,所有节点都已打印完毕。
代码实现:清晰简洁,层层递进
def level_order_III(root):
if not root:
return []
# 初始化队列和打印方向
queue = [root]
direction = True
# 层序遍历二叉树
result = []
while queue:
level_values = []
# 按照当前层的打印方向打印节点值
if direction:
for node in queue:
level_values.append(node.val)
else:
for node in reversed(queue):
level_values.append(node.val)
# 将下一层的节点入队
next_level_nodes = []
for node in queue:
if node.left:
next_level_nodes.append(node.left)
if node.right:
next_level_nodes.append(node.right)
# 切换打印方向
direction = not direction
# 将当前层的节点值添加到结果列表
result.append(level_values)
# 更新队列
queue = next_level_nodes
return result
示例输入与输出:
# 示例二叉树
1
/ \
2 3
/ \ / \
4 5 6 7
# 调用函数打印二叉树
result = level_order_III(root)
# 打印结果
for level in result:
print(level)
输出:
[1]
[3, 2]
[4, 5, 6, 7]
结语:层层递进,左右交替
剑指 Offer 32 - 从上到下打印二叉树 III 问题的关键在于理解分层遍历二叉树并交替改变打印方向的思想。通过这种方法,我们可以以之字形顺序打印二叉树,满足题目要求。希望本文对您理解算法并编写代码有所帮助。
剑指 Offer 系列题目是算法面试中的经典题集,它们往往涉及到各种数据结构和算法知识。通过不断地练习和深入理解这些题目,您可以显著提高自己的算法能力和编程技巧。祝您在算法学习的道路上不断进步,取得骄人的成绩!