返回

二叉树的后序遍历:从最深到最浅层逐一揭秘

前端

理解二叉树的后序遍历

二叉树是一种非线性数据结构,它由节点和边组成。节点包含数据,而边连接节点。后序遍历是一种深度优先搜索算法,它按照以下步骤访问二叉树中的每个节点:

  1. 首先,访问左子树中的所有节点。
  2. 然后,访问右子树中的所有节点。
  3. 最后,访问根节点。

后序遍历的输出顺序与先序遍历和中序遍历不同。先序遍历首先访问根节点,然后访问左子树中的所有节点,最后访问右子树中的所有节点。中序遍历首先访问左子树中的所有节点,然后访问根节点,最后访问右子树中的所有节点。

实现二叉树的后序遍历

递归实现

递归实现后序遍历的思路非常简单:

  1. 首先,访问左子树中的所有节点。
  2. 然后,访问右子树中的所有节点。
  3. 最后,访问根节点。

我们可以使用以下递归函数来实现后序遍历:

def postorder_traversal(root):
  if root is None:
    return

  postorder_traversal(root.left)
  postorder_traversal(root.right)
  print(root.data)

迭代实现

迭代实现后序遍历的思路也比较简单:

  1. 首先,将根节点入栈。
  2. 然后,依次将根节点的左子树和右子树入栈。
  3. 当栈不为空时,将栈顶节点出栈并访问。

我们可以使用以下迭代函数来实现后序遍历:

def postorder_traversal(root):
  stack = []
  visited = set()

  while stack or root:
    if root:
      stack.append(root)
      root = root.left
    else:
      root = stack.pop()
      if root.right and root.right not in visited:
        stack.append(root)
        root = root.right
      else:
        visited.add(root)
        print(root.data)
        root = None

实例

考虑以下二叉树:

        1
       / \
      2   3
     / \
    4   5

后序遍历该二叉树的输出为:

4 5 2 3 1

结论

后序遍历是一种深度优先搜索算法,它按照从最深层次的节点到最浅层次的节点的顺序访问二叉树中的每个节点。我们可以使用递归或迭代方法来实现后序遍历。后序遍历在许多应用中都有用处,例如计算二叉树的高度和宽度、查找二叉树中的最大或最小值、以及判断二叉树是否是对称的。