diff --git a/solution/0100-0199/0133.Clone Graph/README.md b/solution/0100-0199/0133.Clone Graph/README.md index 9ddb2d980fbb0..084b1120ad0d8 100644 --- a/solution/0100-0199/0133.Clone Graph/README.md +++ b/solution/0100-0199/0133.Clone Graph/README.md @@ -99,6 +99,43 @@ ``` +### **TypeScript** + +```ts +/** + * Definition for Node. + * class Node { + * val: number + * neighbors: Node[] + * constructor(val?: number, neighbors?: Node[]) { + * this.val = (val===undefined ? 0 : val) + * this.neighbors = (neighbors===undefined ? [] : neighbors) + * } + * } + */ + +function cloneGraph(node: Node | null): Node | null { + if (node == null) return null; + + const visited = new Map(); + visited.set(node, new Node(node.val)); + const queue = [node]; + while (queue.length) { + const cur = queue.shift(); + for (let neighbor of cur.neighbors || []) { + if (!visited.has(neighbor)) { + queue.push(neighbor); + const newNeighbor = new Node(neighbor.val, []); + visited.set(neighbor, newNeighbor); + } + const newNode = visited.get(cur); + newNode.neighbors.push(visited.get(neighbor)); + } + } + return visited.get(node); +}; +``` + ### **...** ``` diff --git a/solution/0100-0199/0133.Clone Graph/README_EN.md b/solution/0100-0199/0133.Clone Graph/README_EN.md index e7c7f9bb943fa..edc5b72a45d22 100644 --- a/solution/0100-0199/0133.Clone Graph/README_EN.md +++ b/solution/0100-0199/0133.Clone Graph/README_EN.md @@ -113,6 +113,43 @@ class Node { ``` +### **TypeScript** + +```ts +/** + * Definition for Node. + * class Node { + * val: number + * neighbors: Node[] + * constructor(val?: number, neighbors?: Node[]) { + * this.val = (val===undefined ? 0 : val) + * this.neighbors = (neighbors===undefined ? [] : neighbors) + * } + * } + */ + +function cloneGraph(node: Node | null): Node | null { + if (node == null) return null; + + const visited = new Map(); + visited.set(node, new Node(node.val)); + const queue = [node]; + while (queue.length) { + const cur = queue.shift(); + for (let neighbor of cur.neighbors || []) { + if (!visited.has(neighbor)) { + queue.push(neighbor); + const newNeighbor = new Node(neighbor.val, []); + visited.set(neighbor, newNeighbor); + } + const newNode = visited.get(cur); + newNode.neighbors.push(visited.get(neighbor)); + } + } + return visited.get(node); +}; +``` + ### **...** ``` diff --git a/solution/0100-0199/0133.Clone Graph/Solution.ts b/solution/0100-0199/0133.Clone Graph/Solution.ts new file mode 100644 index 0000000000000..28fa7f007f933 --- /dev/null +++ b/solution/0100-0199/0133.Clone Graph/Solution.ts @@ -0,0 +1,32 @@ +/** + * Definition for Node. + * class Node { + * val: number + * neighbors: Node[] + * constructor(val?: number, neighbors?: Node[]) { + * this.val = (val===undefined ? 0 : val) + * this.neighbors = (neighbors===undefined ? [] : neighbors) + * } + * } + */ + + function cloneGraph(node: Node | null): Node | null { + if (node == null) return null; + + const visited = new Map(); + visited.set(node, new Node(node.val)); + const queue = [node]; + while (queue.length) { + const cur = queue.shift(); + for (let neighbor of cur.neighbors || []) { + if (!visited.has(neighbor)) { + queue.push(neighbor); + const newNeighbor = new Node(neighbor.val, []); + visited.set(neighbor, newNeighbor); + } + const newNode = visited.get(cur); + newNode.neighbors.push(visited.get(neighbor)); + } + } + return visited.get(node); +};