14.1 Clone Graph

来源:互联网 发布:软件许可授权书 编辑:程序博客网 时间:2024/05/19 10:09

Link: https://oj.leetcode.com/problems/clone-graph/

Approach I: BFS

My first attempt: //Code is not correct. 

public class Solution {    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {                LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();        queue.add(node);        while(!queue.isEmpty()){            UndirectedGraphNode n = queue.poll();            UndirectedGraphNode newNode = new UndirectedGraphNode(n.label);            ArrayList<UndirectedGraphNode> list = new ArrayList<UndirectedGraphNode>();            for(UndirectedGraphNode neighbor : n.neighbors){                list.add(neighbor);                queue.add(neigbhor);            }            newNode.neighbors = new ArrayList<UndirectedGraphNode>(list);        }        return newNode;    }}

Correct Answer:

public class Solution {    public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {        if(node == null) return null;        LinkedList<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>();        HashMap<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<UndirectedGraphNode, UndirectedGraphNode>();        UndirectedGraphNode copy = new UndirectedGraphNode(node.label);        map.put(node, copy);        queue.add(node);                while(!queue.isEmpty()){            UndirectedGraphNode cur = queue.poll();            for(int i = 0; i < cur.neighbors.size(); i++){                UndirectedGraphNode neighbor = cur.neighbors.get(i);                if(!map.containsKey(neighbor)){                    copy = new UndirectedGraphNode(neighbor.label);                    map.put(neighbor, copy);                    queue.add(neighbor);                }                map.get(cur).neighbors.add(map.get(neighbor));//map.get(cur) is the copy of cur            }        }        return map.get(node);    }}
Approach II: DFS

Just replace queue by stack???

0 0
原创粉丝点击