当前位置:首页 > 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如何调用react组件

JS如何调用react组件

调用React组件的常见方法 在JavaScript中调用React组件通常涉及以下几种场景和方式: 直接渲染组件 通过ReactDOM.render()方法将组件渲染到DOM节点: import…

JS奇数实现

JS奇数实现

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

dfs js实现

dfs js实现

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

JS实现inpubox

JS实现inpubox

实现 InputBox 的基本结构 使用 HTML 和 CSS 创建一个基础的输入框结构,确保样式简洁且易于扩展。 <div class="input-box"> <input…

JS实现跳表

JS实现跳表

跳表(Skip List)简介 跳表是一种基于概率的平衡数据结构,通过多层链表实现高效查找、插入和删除操作,时间复杂度为 $O(\log n)$。其核心思想是通过“跳跃”式访问节点减少遍历次数。 跳…

JS实现哀悼

JS实现哀悼

实现网页哀悼效果的方法 在网页上实现哀悼效果通常指将页面整体调整为黑白或灰色调,以示哀悼。以下是几种常见的实现方式: CSS滤镜实现 通过CSS的filter属性可以快速将整个页面转为灰度。将以下代…