当前位置:首页 > JavaScript

JS实现dfs

2026-03-14 08:40:47JavaScript

深度优先搜索(DFS)实现

深度优先搜索是一种用于遍历或搜索树或图的算法。在JavaScript中,可以通过递归或栈来实现DFS。

递归实现

递归实现DFS是最直观的方法,适用于树或图的遍历。

function dfs(node, visited = new Set()) {
  if (!node || visited.has(node)) return;

  visited.add(node);
  console.log(node.value); // 处理当前节点

  node.children.forEach(child => {
    dfs(child, visited);
  });
}

栈实现

使用栈可以避免递归带来的堆栈溢出问题,适合处理大规模数据。

function dfs(startNode) {
  const stack = [startNode];
  const visited = new Set();

  while (stack.length > 0) {
    const node = stack.pop();

    if (!visited.has(node)) {
      visited.add(node);
      console.log(node.value); // 处理当前节点

      // 逆序压栈,保证顺序正确
      node.children.slice().reverse().forEach(child => {
        stack.push(child);
      });
    }
  }
}

处理图结构

对于图结构,需要额外处理循环引用问题。

function dfsGraph(startNode) {
  const stack = [startNode];
  const visited = new Set();

  while (stack.length > 0) {
    const node = stack.pop();

    if (!visited.has(node)) {
      visited.add(node);
      console.log(node.value);

      node.neighbors.forEach(neighbor => {
        if (!visited.has(neighbor)) {
          stack.push(neighbor);
        }
      });
    }
  }
}

应用示例

假设有一个树结构:

JS实现dfs

const tree = {
  value: 1,
  children: [
    {
      value: 2,
      children: [
        { value: 4, children: [] },
        { value: 5, children: [] }
      ]
    },
    {
      value: 3,
      children: [
        { value: 6, children: [] },
        { value: 7, children: [] }
      ]
    }
  ]
};

dfs(tree); // 输出:1, 2, 4, 5, 3, 6, 7

注意事项

递归实现简洁但可能遇到堆栈溢出问题,栈实现更稳定但代码稍复杂。根据实际场景选择合适的实现方式。对于大型数据结构,优先考虑栈实现。

标签: JSdfs
分享给朋友:

相关文章

JS如何访问react内部的数据

JS如何访问react内部的数据

访问 React 组件内部数据的方法 在 React 中,组件内部的数据通常通过 state 或 props 管理。以下是几种常见的访问方式: 通过 state 访问数据 React 组件的内部状态…

JS如何实现左右滑动

JS如何实现左右滑动

实现左右滑动的方法 使用 touchstart、touchmove 和 touchend 事件监听触摸操作,计算滑动距离和方向。 let startX, moveX; element.addEve…

JS能实现跨平台吗

JS能实现跨平台吗

JavaScript 的跨平台能力 JavaScript 是一种高度灵活的脚本语言,通过不同运行时环境和工具链可以实现跨平台开发。以下是其跨平台能力的核心实现方式: 浏览器环境 JavaScript…

JS奇数实现

JS奇数实现

判断数字是否为奇数 在JavaScript中,可以通过取模运算符(%)来判断一个数字是否为奇数。奇数除以2的余数为1。 function isOdd(num) { return num %…

dfs js实现

dfs js实现

DFS(深度优先搜索)的 JavaScript 实现 深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。以下是几种常见的实现方式: 递归实现(适用于树或图) function dfs(node…

动态实现JS

动态实现JS

动态实现 JavaScript 的方法 动态加载脚本 通过创建 script 元素并插入到 DOM 中实现动态加载。例如: const script = document.createEleme…