当前位置:首页 > JavaScript

dfs js实现

2026-04-06 05:31:29JavaScript

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

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

dfs js实现

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

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

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

  // 遍历邻居节点(图)或子节点(树)
  for (const neighbor of node.neighbors) {
    dfs(neighbor, 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); // 处理当前节点

      // 将邻居节点逆序压入栈中(保证顺序)
      for (let i = node.neighbors.length - 1; i >= 0; i--) {
        stack.push(node.neighbors[i]);
      }
    }
  }
}

针对二叉树的DFS实现

// 前序遍历
function preorder(root) {
  if (!root) return;
  console.log(root.val);
  preorder(root.left);
  preorder(root.right);
}

// 中序遍历
function inorder(root) {
  if (!root) return;
  inorder(root.left);
  console.log(root.val);
  inorder(root.right);
}

// 后序遍历
function postorder(root) {
  if (!root) return;
  postorder(root.left);
  postorder(root.right);
  console.log(root.val);
}

图的DFS实现(处理环)

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

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

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

    for (const neighbor of node.neighbors) {
      if (!visited.has(neighbor)) {
        stack.push(neighbor);
      }
    }
  }
}

注意事项

  • 对于图结构,必须使用visited集合来避免循环和重复访问
  • 递归实现可能导致调用栈溢出,对于深度大的结构建议使用迭代实现
  • 时间复杂度为O(V+E),其中V是顶点数,E是边数
  • 空间复杂度为O(V),最坏情况下需要存储所有节点

这些实现可以根据具体需求进行调整,例如添加回调函数代替console.log,或返回遍历结果等。

标签: dfsjs
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…