DFS 和 BDS 算法

sankigan2025-2-20算法搜索算法

深度优先搜索(DFS)

深度优先搜索(DFS)是遍历二叉树的常用方法之一。DFS有三种常见的遍历方式:前序遍历、中序遍历和后序遍历。

前序遍历

访问顺序:根节点 -> 左子树 -> 右子树

function preorderTraversal(root) {
  if (!root) return;
  const res = [];

  const dfs = (node) => {
    if (!node) return;

    res.push(node.val); // 访问根节点
    dfs(node.left); // 递归遍历左子树
    dfs(node.right); // 递归遍历右子树
  };

  dfs(node); // 从根节点开始遍历
  return res;
}

中序遍历

访问顺序:左子树 -> 根节点 -> 右子树

function inorderTraversal(root) {
  if (!root) return [];
  const res = [];

  const dfs = (node) => {
    if (!node) return;

    dfs(node.left);
    res.push(node.val);
    dfs(node.right);
  };

  dfs(root);
  return res;
}

后序遍历

访问顺序: 左子树 -> 右子树 -> 根节点

function postorderTraversal(root) {
  if (!root) return [];
  const res = [];

  const dfs = (node) => {
    if (!node) return;

    dfs(node.left);
    dfs(node.right);
    res.push(node.val);
  };

  dfs(root);
  return res;
}

广度优先搜索 (BFS)

广度优先搜索(BFS)是一种逐层遍历二叉树的算法,通常使用队列来实现。它的访问顺序是从根节点开始,逐层向下遍历,每一层从左到右依次访问节点。

function breadthFirstTraversal(root) {
  if (!root) return [];

  const res = [];
  const queue = [root];

  while (queue.length) {
    const node = queue.shift();
    res.push(node.val);
    if (node.left) queue.push(node.left);
    if (node.right) queue.push(node.right);
  }

  return res;
}
更新于 2025/2/20 21:54:14