📜  侧向遍历完整的二叉树(1)

📅  最后修改于: 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

这些遍历结果提供了不同的视角,可以帮助我们更好地理解二叉树的结构和内容。