| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 'use strict'/** * Definition for undirected graph. * function UndirectedGraphNode(label) { *     this.label = label; *     this.neighbors = [];   // Array of UndirectedGraphNode * } */function UndirectedGraphNode(label) {    this.label = label    this.neighbors = [] // Array of UndirectedGraphNode}/** * @param {UndirectedGraphNode} graph * @return {UndirectedGraphNode} */var cloneGraph = function (graph) {    if (graph == null) return null    const map = new Map()    return clone(graph, map)}/** * @param {UndirectedGraphNode} node  * @param {Map} map * @return {UndirectedGraphNode} */function clone(node, map) { // DFS    if (node === null) return null    if (map.get(node.label) !== undefined)        return map.get(node.label)    const copy = new UndirectedGraphNode(node.label)    map.set(copy.label, copy)    for (const n of node.neighbors) {        copy.neighbors.push(clone(n, map))    }    return copy}function __main__() {    /* eslint no-console: ["error", {allow: ["log"]}] */    const logger = console.log.bind(console)    const n3 = new UndirectedGraphNode(3)    const n2 = new UndirectedGraphNode(2)    const n1 = new UndirectedGraphNode(1)    n3.neighbors = [n2, n3]    n2.neighbors = [n1, n3]    n1.neighbors = [n2, n3]    const n = cloneGraph(n1)    logger(n)}__main__()
 |