📅  最后修改于: 2023-12-03 15:21:40.381000             🧑  作者: Mango
本文介绍了二叉树的顺时针螺旋遍历算法。该算法可以将二叉树中节点按照顺时针方向螺旋遍历。
本算法通过分层遍历分别获得每一层的节点。对于每一层,根据访问的方向,将该层节点的值加入结果数组中。遍历完所有层后,即可得到顺时针螺旋遍历结果。
本算法使用TreeNode结构表示二叉树的节点。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def spiralOrder(self, root: TreeNode) -> List[int]:
if not root:
return []
# 定义遍历结果数组和节点列表
result = []
nodes = [root]
# 定义访问方向,0表示向右,1表示向下,2表示向左,3表示向上
direction = 0
# 当节点列表不为空时进行遍历
while nodes:
# 获取本层节点数
size = len(nodes)
# 根据方向遍历本层节点
if direction == 0:
result.extend([node.val for node in nodes])
elif direction == 1:
result.extend([node.val for node in nodes[::-1]])
elif direction == 2:
result.extend([node.val for node in nodes[::-1]])
else:
result.extend([node.val for node in nodes])
# 生成下一层节点列表
next_nodes = []
for i in range(size):
if nodes[i].left:
next_nodes.append(nodes[i].left)
if nodes[i].right:
next_nodes.append(nodes[i].right)
nodes = next_nodes
# 更新访问方向
direction = (direction + 1) % 4
return result
本算法实现了二叉树的顺时针螺旋遍历。该算法时间复杂度为O(n),空间复杂度为O(n)。