返回

二叉树之旅:前序、中序、后序

前端

二叉树是计算机科学中一种重要的数据结构,它可以用来表示许多不同的数据结构,例如堆、图和集合。遍历是访问二叉树中每个节点的过程,有三种主要的遍历方式:前序遍历、中序遍历和后序遍历。这三种遍历方式都可以使用递归或迭代来实现。

前序遍历

前序遍历的顺序是:根节点、左子树、右子树。在每个节点被访问之前,它会先访问它的左子树,然后访问它的右子树。这种遍历方式经常被用于打印二叉树的结构,因为它是深度优先的遍历方式。

中序遍历

中序遍历的顺序是:左子树、根节点、右子树。在每个节点被访问之前,它会先访问它的左子树,然后访问它的根节点,最后访问它的右子树。这种遍历方式经常被用于对二叉树中的元素进行排序,因为它是中序的遍历方式。

后序遍历

后序遍历的顺序是:左子树、右子树、根节点。在每个节点被访问之前,它会先访问它的左子树,然后访问它的右子树,最后访问它的根节点。这种遍历方式经常被用于释放二叉树中的内存,因为它是后序的遍历方式。

递归实现

这三种遍历方式都可以使用递归来实现。以下是用递归实现的前序遍历、中序遍历和后序遍历的代码:

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

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

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

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

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

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

迭代实现

这三种遍历方式也可以使用迭代来实现。以下是用迭代实现的前序遍历、中序遍历和后序遍历的代码:

def preorder_traversal(root):
  stack = []
  while root or stack:
    while root:
      stack.append(root)
      print(root.data)
      root = root.left

    root = stack.pop()
    root = root.right

def inorder_traversal(root):
  stack = []
  while root or stack:
    while root:
      stack.append(root)
      root = root.left

    root = stack.pop()
    print(root.data)
    root = root.right

def postorder_traversal(root):
  stack = []
  last_visited = None
  while root or stack:
    while root:
      stack.append(root)
      root = root.left

    root = stack[-1]
    if not root.right or root.right == last_visited:
      root = stack.pop()
      print(root.data)
      last_visited = root
      root = None
    else:
      root = root.right

二叉树的遍历是计算机科学中的一项基本技能,它可以帮助你理解和操纵二叉树。这三种遍历方式各有其用途,你可以根据你的具体需求选择合适的遍历方式。