[数据结构与算法]克隆图

深度优先遍历:

    /**
     * // 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) => {
        const nCopy = new Node(n.val)
        visited.set(n, nCopy)
        ;(n.neighbors || []).forEach(ne => { // 注意这里要加分号,防止理解为set()()
          if (!visited.has(ne)) {
            dfs(ne)
          }
          nCopy.neighbors.push(visited.get(ne)) // 因为先dfs(ne)了,所以这里肯定能get到ne
        })
      }
      dfs(node)
      return visited.get(node)
    };

广度优先遍历:

    /**
     * // 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 nCopy = new Node(node.val)
      visited.set(node, nCopy)
      const q = [node]
      while (q.length) {
        const n = q.shift()
        ;(n.neighbors || []).forEach(ne => {
          if (!visited.has(ne)) {
            q.push(ne)
            const nCopy = new Node(ne.val)
            visited.set(ne, nCopy)
          }
          visited.get(n).neighbors.push(visited.get(ne))
        })
      }
      return visited.get(node)
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值