Описание:
Учитывая ссылку на узел в подключенном неизорированном графике.
Вернуть глубокую копию (клон) графика.
Каждый узел в графике содержит значение (int) и список (список [узел]) его соседей.
класс Node {public int val; общественный список соседей; }
Формат тестового случая:
Для простоты значение каждого узла совпадает с индексом узла (1-индексированное). Например, первый узел с Val, второй узел с Val и так далее. График представлен в тестовом примере с использованием списка смежности.
Список смежности представляет собой набор неупорядоченных списков, используемых для представления конечного графика. Каждый список описывает набор соседей узла на графике.
Данный узел всегда будет первым узлом. Вы должны вернуть копию данного узла в качестве ссылки на клонированный график.
Решение:
Сложность времени: O (n) Сложность пространства: O (n)
// DFS approach
var cloneGraph = function(node) {
// Nodes we have already copied
const visited = {};
// DFS function to copy graph
const dfs = (node) => {
if (!node) return node;
// If we have seen this node before, return it
if (visited[node.val]!=null) return visited[node.val];
// Create base for copied node
const root = new Node(node.val);
// Add this copied node to group of nodes we hav copied
visited[node.val] = root;
// Add copied neighbors to the current copied node
node.neighbors.forEach(n => root.neighbors.push(dfs(n)))
return root;
}
// Return new copied graph
return dfs(node);
};
Оригинал: “https://dev.to/cod3pineapple/leetcode-133-clone-graph-javascript-solution-4plk”