JavaScript实现 - LeetCode刷题 -【克隆图】- 第 133 题 !!!

本文介绍了如何使用JavaScript解决LeetCode中的图复制问题,通过深度优先搜索(DFS)和广度优先搜索(BFS)遍历图的所有节点并复制它们的连接。解题步骤包括遍历节点、复制节点以及重建连接。代码清晰地展示了两种方法的实现,并分析了时间复杂度为O(n)、空间复杂度为O(n)。学习此方法有助于提升图算法的理解和应用。
摘要由CSDN通过智能技术生成

题目:

LeetCode题目链接

题目截图:

LeetCode刷题

解题步骤:

1.深度或广度优先遍历所有节点             
2.拷贝所有的节点,存储起来
3.将拷贝的节点,按照原图的连接方法进行连接

代码:

/**
 * // Definition for a Node.
 * function Node(val, neighbors) {
 *    this.val = val === undefined ? 0 : val;
 *    this.neighbors = neighbors === undefined ? [] : neighbors;
 * };
 */

/**
 * @param {Node} node
 * @return {Node}
 */
var cloneGraph = function (node) {
  // 下面的是深度优先遍历的方式
  // if (!node) return;
  // const visited = new Map();
  // const dfs = (n) => {
  //   // console.log(n.val);
  //   const nCopy = new Node(n.val);
  //   visited.set(n, nCopy);
  //   (n.neighbors || []).forEach(ne => {
  //     if (!visited.has(ne)) dfs(ne);
  //     nCopy.neighbors.push(visited.get(ne));
  //   });
  // };
  // dfs(node);                            
  // return visited.get(node);  
  
  // 下面的是广度优先遍历的方式
  if (!node) return;
  const visited = new Map();
  visited.set(node, new Node(node.val));
  const q = [node];
  while (q.length) {
    const n = q.shift();
    // console.log(n.val); 
    (n.neighbors || []).forEach(ne => { 
      if (!visited.has(ne)) {
        q.push(ne);
        visited.set(ne, new Node(ne.val));
      }
      visited.get(n).neighbors.push(visited.get(ne));
    });
  }
  return visited.get(node);
};

时间复杂度分析:

时间复杂度是O(n),n是图的节点个数

空间复杂度分析:

空间复杂度是O(n)

怎么样,是不是很简单,你学会了吗 ?

LeetCode刷题

LeetCode刷题

如果这篇文章能够帮助到您,希望您不要吝惜点赞👍👍和收藏💖💖,您的支持是我继续努力的动力 💪💪 !!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值