133. 克隆图

自己做
解:DFS

/*
// Definition for a Node.
class Node {public int val;public List<Node> neighbors;public Node() {val = 0;neighbors = new ArrayList<Node>();}public Node(int _val) {val = _val;neighbors = new ArrayList<Node>();}public Node(int _val, ArrayList<Node> _neighbors) {val = _val;neighbors = _neighbors;}
}
*/class Solution {private Map<Integer, Node> m = new HashMap(); //标记该结点在clone中是否存在private Set<Integer> s = new HashSet(); //标记该结点是否在DFS中访问过public void DFS(Node node, Node res){for(int i = 0; i < node.neighbors.size(); i++){Node next_node = node.neighbors.get(i);if(!m.containsKey(next_node.val)){ //结点在clone中不存在,创建新结点,加入集合Node new_node = new Node(next_node.val);m.put(new_node.val, new_node);}res.neighbors.add(m.get(next_node.val)); //建立边if(!s.contains(next_node.val)){ //DFS没有访问过该结点的情况下,继续向下访问s.add(next_node.val); //标记访问过DFS(next_node, m.get(next_node.val));}}}public Node cloneGraph(Node node) {if(node == null)return null;Node res = new Node(node.val);s.add(res.val);m.put(res.val, res);DFS(node, res);return res;}
}
