返回
LeetCode 103:二叉树的锯齿形层序遍历**
前端
2024-02-16 00:41:34
锯齿形遍历的艺术
想象一下一棵二叉树,就像一棵真正的树,树枝向四面八方伸展。传统层序遍历按层探索这棵树,从上到下,一层一层地。然而,锯齿形层序遍历更具趣味性,它像微风轻轻摇曳树叶,从左到右遍历每一层,然后从右到左遍历下一层,依此类推。
算法的魔法
解决这个问题的诀窍在于使用广度优先搜索(BFS),这是一种遍历树形数据结构的有效方法。我们使用队列来存储每一层的节点,然后逐层处理它们。为了实现锯齿形遍历,我们交替使用栈来临时反转节点顺序。
具体步骤如下:
- 将根节点放入队列中。
- 循环执行以下步骤,直到队列为空:
- 从队列中取出所有节点并存储在栈中。
- 从栈中弹出节点并访问它们。
- 将访问过的节点的子节点放入队列中。
- 如果当前层是奇数层,则从左到右遍历节点;否则从右到左遍历节点。
示例代码
def zigzagLevelOrder(root):
if not root:
return []
queue = [root]
result = []
level = 0
while queue:
level_size = len(queue)
level_values = []
for i in range(level_size):
node = queue.pop(0)
level_values.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
if level % 2 == 1:
level_values.reverse()
result.append(level_values)
level += 1
return result
结语
通过这篇文章,我们深入了解了锯齿形层序遍历的算法,并使用 BFS 和栈提供了清晰的解决方案。无论你是初学者还是经验丰富的程序员,希望这篇文章能够激发你的兴趣,帮助你解决更复杂的算法问题。记住,算法的魅力在于其优雅和效率,它们可以帮助我们以更智能、更有效的方式解决现实世界的问题。