当前位置:首页 > JavaScript

dfs js实现

2026-03-14 11:33:17JavaScript

DFS(深度优先搜索)的 JavaScript 实现

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

递归实现(适用于树或图)

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

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

  // 遍历相邻节点
  node.neighbors.forEach(neighbor => {
    dfs(neighbor, visited);
  });
}

迭代实现(使用栈)

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

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

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

      // 将相邻节点逆序压入栈中(保持遍历顺序)
      [...node.neighbors].reverse().forEach(neighbor => {
        stack.push(neighbor);
      });
    }
  }
}

针对二叉树的实现

// 递归版
function dfsBinaryTree(node) {
  if (!node) return;

  console.log(node.val); // 前序遍历
  dfsBinaryTree(node.left);
  dfsBinaryTree(node.right);
}

// 迭代版
function dfsBinaryTreeIterative(root) {
  const stack = [root];

  while (stack.length) {
    const node = stack.pop();
    if (!node) continue;

    console.log(node.val);
    stack.push(node.right); // 右节点先入栈
    stack.push(node.left);  // 左节点后入栈
  }
}

图遍历注意事项

对于图结构的DFS,必须使用visited集合来避免循环访问:

dfs js实现

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

  while (stack.length) {
    const node = stack.pop();
    console.log(node.value);

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

这些实现可以根据具体需求进行调整,例如添加回调函数来处理节点,或返回遍历结果数组。

标签: dfsjs
分享给朋友:

相关文章

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…