当前位置:首页 > JavaScript

dfs js实现

2026-03-14 11:33:17JavaScript

dfs js实现

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

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

dfs js实现

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

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集合来避免循环访问:

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实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

jquery.js

jquery.js

jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互等操作。以下是关于 jQuery.js 的核心信息和使用方法: 获…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…