返回

二叉树算法面试题:掌握递归、栈和队列,直击算法本质

见解分享

二叉树是计算机科学中一种常见的数据结构,它由一组节点组成,每个节点最多有两个子节点。二叉树的算法在许多领域都有着广泛的应用,如数据库、编译器、操作系统等。掌握二叉树算法,对程序员来说是必备的基本功。

二叉树的前序遍历

前序遍历是一种深度优先搜索(DFS)算法,它按照根节点、左子节点、右子节点的顺序访问二叉树中的节点。前序遍历的算法思想是:

  1. 访问根节点。
  2. 递归遍历左子树。
  3. 递归遍历右子树。

前序遍历的代码实现如下:

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

  # 访问根节点
  print(root.val)

  # 递归遍历左子树
  preorder_traversal(root.left)

  # 递归遍历右子树
  preorder_traversal(root.right)

二叉树的中序遍历

中序遍历也是一种深度优先搜索(DFS)算法,它按照左子节点、根节点、右子节点的顺序访问二叉树中的节点。中序遍历的算法思想是:

  1. 递归遍历左子树。
  2. 访问根节点。
  3. 递归遍历右子树。

中序遍历的代码实现如下:

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

  # 递归遍历左子树
  inorder_traversal(root.left)

  # 访问根节点
  print(root.val)

  # 递归遍历右子树
  inorder_traversal(root.right)

二叉树的后序遍历

后序遍历也是一种深度优先搜索(DFS)算法,它按照左子节点、右子节点、根节点的顺序访问二叉树中的节点。后序遍历的算法思想是:

  1. 递归遍历左子树。
  2. 递归遍历右子树。
  3. 访问根节点。

后序遍历的代码实现如下:

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

  # 递归遍历左子树
  postorder_traversal(root.left)

  # 递归遍历右子树
  postorder_traversal(root.right)

  # 访问根节点
  print(root.val)

二叉树的层次遍历

层次遍历是一种广度优先搜索(BFS)算法,它按照从上到下的顺序访问二叉树中的节点。层次遍历的算法思想是:

  1. 将根节点加入队列。
  2. 当队列不为空时,出队一个节点并访问它。
  3. 将该节点的左子节点和右子节点加入队列。
  4. 重复步骤2和步骤3,直到队列为空。

层次遍历的代码实现如下:

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

  # 将根节点加入队列
  queue = [root]

  # 当队列不为空时
  while queue:
    # 出队一个节点并访问它
    node = queue.pop(0)
    print(node.val)

    # 将该节点的左子节点和右子节点加入队列
    if node.left is not None:
      queue.append(node.left)
    if node.right is not None:
      queue.append(node.right)

结语

二叉树算法是计算机科学中的基础算法,也是面试中经常考察的题目。掌握二叉树算法,对程序员来说是必备的基本功。希望本文对您有所帮助,祝您在面试中取得好成绩!