📅  最后修改于: 2023-12-03 14:49:59.744000             🧑  作者: Mango
在二叉树中,我们通常使用前序遍历、中序遍历和后序遍历来访问所有节点。但是,有时我们需要以侧向的方式遍历完整的二叉树,以获得不同的视角。
侧向遍历是指从左到右或从右到左,按相应的顺序访问二叉树的所有节点。与前、中、后序遍历不同的是,侧向遍历不仅仅是访问节点,同时还要记录访问该节点时所在的层数。
下面是一种实现侧向遍历的示例算法。假设我们从左到右遍历二叉树,我们首先遍历根节点,并把它存储在一个列表中。然后我们递归地遍历根节点的右子树和左子树,每当我们进入下一层时,我们将该层的所有节点添加到列表中。
def printTree(root):
# 记录节点的深度和值
result = []
# 遍历每一层的所有节点
def dfs(node, depth):
if not node:
return
# 如果当前深度还没有节点,则添加一个新的层级
if depth >= len(result):
result.append([node.val])
else:
result[depth].append(node.val)
# 递归遍历右子树和左子树
dfs(node.right, depth + 1)
dfs(node.left, depth + 1)
dfs(root, 0)
# 打印节点的值
for i in range(len(result)):
print(' '.join(map(str, result[i])))
例如,假设我们有以下二叉树:
1
/ \
2 3
/ \ / \
4 5 6 7
如果我们从左到右进行侧向遍历,我们将得到以下结果:
1
2 3
4 5 6 7
如果我们从右到左进行侧向遍历,我们将得到以下结果:
1
3 2
7 6 5 4
这些遍历结果提供了不同的视角,可以帮助我们更好地理解二叉树的结构和内容。