Leetcode Java Clone Graph
업데이트:
문제
코드
/*
// 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 {
public Node cloneGraph(Node node) {
Map<Integer, Node> map = new HashMap<Integer, Node>();
return this.recursive(node, map);
}
private Node recursive(Node node, Map<Integer, Node> map) {
if (node == null) {
return null;
} else if (map.containsKey(node.val)) {
return map.get(node.val);
} else {
Node temp = new Node(node.val);
map.put(temp.val, temp);
for (Node neighbor : node.neighbors) {
temp.neighbors.add(this.recursive(neighbor, map));
}
return temp;
}
}
}
결과
설명
-
주어진 Node인 node를 이용하여 동일한 Node를 만드는 문제이다.
-
Node를 node.val 기준으로 임시 저장하기 위한 Map을 정의한다.
-
재귀 호출을 수행하여 동일한 Node를 만들어 주어진 문제의 결과로 반환한다.
- node가 null인 경우 주어진 Node가 null인 경우이므로, 그대로 null을 반환한다.
- map에 node.val가 존재하는 경우 기존에 만들었던 Node가 존재한다는 의미이므로, map에서 해당 Node를 꺼내서 반환한다.
- 그 외의 경우 map에 존재하지 않는 Node이므로, node.val 값을 이용하여 새 Node를 만든 후 map에 임시 저장하고 재귀 호출을 이용하여 Neighbors를 찾아 추가하고 새 노드인 temp를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기