当前位置:首页 > JavaScript

JS实现dfs

2026-04-06 02:45:25JavaScript

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

递归实现

JS实现dfs

function dfsRecursive(node, visited = new Set()) {
  if (!node || visited.has(node)) return;
  visited.add(node);
  console.log(node.value); // 处理当前节点
  node.children.forEach(child => dfsRecursive(child, visited));
}

迭代实现(使用栈)

JS实现dfs

function dfsIterative(root) {
  const stack = [root];
  const visited = new Set();
  while (stack.length) {
    const node = stack.pop();
    if (!node || visited.has(node)) continue;
    visited.add(node);
    console.log(node.value); // 处理当前节点
    // 子节点逆序入栈以保证顺序
    [...node.children].reverse().forEach(child => stack.push(child));
  }
}

使用场景示例

树结构遍历

class TreeNode {
  constructor(value) {
    this.value = value;
    this.children = [];
  }
}

// 构建树
const root = new TreeNode(1);
root.children = [new TreeNode(2), new TreeNode(3)];
root.children[0].children = [new TreeNode(4), new TreeNode(5)];

图结构遍历(需处理环)

function dfsGraph(node, graph, visited = new Set()) {
  visited.add(node);
  console.log(node);
  graph[node].forEach(neighbor => {
    if (!visited.has(neighbor)) dfsGraph(neighbor, graph, visited);
  });
}

const graph = {
  'A': ['B', 'C'],
  'B': ['A', 'D'],
  'C': ['A', 'E'],
  'D': ['B'],
  'E': ['C']
};

复杂度分析

  • 时间复杂度:O(V + E)(V为顶点数,E为边数)
  • 空间复杂度:O(V)(最坏情况下栈/递归深度)

注意事项

  • 处理图结构时必须记录已访问节点,避免循环导致的无限递归
  • 递归实现可能因调用栈过深导致堆栈溢出,大型数据结构建议使用迭代实现
  • 可根据实际需求修改处理节点的逻辑(如替换console.log

标签: JSdfs
分享给朋友:

相关文章

JS实现跳表

JS实现跳表

跳表的基本概念 跳表(Skip List)是一种基于概率的数据结构,允许快速查询、插入和删除操作,时间复杂度平均为O(log n)。它通过多层链表实现,每一层都是下一层的子集,高层链表跳过多个元素,从…

JS如何实现左右滑动

JS如何实现左右滑动

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

实现 slice JS

实现 slice JS

实现 JavaScript 的 slice 方法 JavaScript 的 slice 方法用于从数组或字符串中提取一部分,返回一个新的数组或字符串,而不修改原始数据。以下是实现 slice 的核心逻…

JS实现netty

JS实现netty

在JavaScript中实现类似Netty的功能 Netty是一个高性能的Java网络框架,专注于异步事件驱动的网络编程。要在JavaScript中实现类似功能,可以使用Node.js的核心模块或第三…

JS实现勋章

JS实现勋章

实现动态勋章效果 使用CSS和JavaScript创建动态旋转勋章。HTML部分定义勋章容器,CSS设置样式和动画,JavaScript控制交互行为。 <div class="badge-co…

JS实现取色

JS实现取色

使用 input[type="color"] 获取颜色值 HTML5 提供了原生颜色选择器,通过 <input type="color"> 可直接调用系统取色工具。用户选择的颜色会以十六进…