[Algo] 132. Deep Copy Undirected Graph
Make a deep copy of an undirected graph, there could be cycles in the original graph.
Assumptions
- The given graph is not null
DFS
/* * class GraphNode { * public int key; * public List<GraphNode> neighbors; * public GraphNode(int key) { * this.key = key; * this.neighbors = new ArrayList<GraphNode>(); * } * } */ public class Solution { public List<GraphNode> copy(List<GraphNode> graph) { // Write your solution here. Map<GraphNode, GraphNode> map = new HashMap<>(); for (GraphNode node : graph) { if (!map.containsKey(node)) { map.put(node, new GraphNode(node.key)); } dfs(node, map); } return new ArrayList<>(map.values()); } private void dfs(GraphNode node, Map<GraphNode, GraphNode> map) { GraphNode newNode = map.get(node); for (GraphNode gNode : node.neighbors) { if (!map.containsKey(gNode)) { map.put(gNode, new GraphNode(gNode.key)); } newNode.neighbors.add(map.get(gNode)); } } }
BFS
/* * class GraphNode { * public int key; * public List<GraphNode> neighbors; * public GraphNode(int key) { * this.key = key; * this.neighbors = new ArrayList<GraphNode>(); * } * } */ public class Solution { public List<GraphNode> copy(List<GraphNode> graph) { // Write your solution here. Map<GraphNode, GraphNode> map = new HashMap<>(); for (GraphNode gNode: graph) { map.put(gNode, new GraphNode(gNode.key)); } for (GraphNode node : graph) { GraphNode cpNode = map.get(node); for (GraphNode nei: node.neighbors) { cpNode.neighbors.add(map.get(nei)); } } return new ArrayList<>(map.values()); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步