Leetcode Java Create Binary Tree From Descriptions
업데이트:
문제
코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode createBinaryTree(int[][] descriptions) {
Map<Integer, TreeNode> map = new HashMap<>();
Set<Integer> children = new HashSet<>();
for (int[] description : descriptions) {
int parent = description[0];
int child = description[1];
int isLeft = description[2];
children.add(child);
TreeNode node = map.getOrDefault(parent, new TreeNode(parent));
if (isLeft == 1) {
node.left = map.getOrDefault(child, new TreeNode(child));
map.put(child, node.left);
} else {
node.right = map.getOrDefault(child, new TreeNode(child));
map.put(child, node.right);
}
map.put(parent, node);
}
for (int[] description : descriptions) {
if (!children.contains(description[0])) {
return map.get(description[0]);
}
}
return null;
}
}
결과
설명
- 2차원 정수 배열인 descriptions가 주어지면 아래의 규칙에 따라 TreeNode를 만들어 반환하는 문제이다.
- descriptions[i] = [parenti, childi, isLefti] 를 만족한다.
- TreeNode 내 parenti는 childi의 고유한 부모를 나타낸다.
- isLefti가 1이면 부모 노드의 좌측, 0이면 부모 우측 노드임을 나타낸다.
- 문제 풀이에 필요한 변수를 정의한다.
- map은 각 값에 대한 노드를 저장할 변수로, HashMap으로 초기화한다.
- children은 각 값들이 자식 노드에 대한 값인지 저장할 변수로, 중복을 제거하기 위하여 HashSet으로 초기화한다.
- descriptions의 각 값들을 description에 순차적으로 넣어 아래를 수행한다.
- 문제 풀이에 필요한 변수를 정의한다.
- parent, child, isLeft에 description의 각 값들을 순서대로 넣어준다.
- node는 부모 노드를 저장할 변수로, map에서 parent에 해당하는 노드를 꺼내 넣어주고, 존재하지 않으면 새 TreeNode를 parent 값으로 초기화하여 넣어준다.
- children에 child를 넣어 자식 노드의 값을 추가해준다.
- isLeft가 1이면 node의 left에, 0이면 node의 right에 map에서 child에 해당하는 노드가 존재하면 꺼내 넣어주고, 존재하지 않으면 새 TreeNode를 child 값으로 초기화하여 넣어 준다.
- 위의 각 경우에 따른 node를 map 내 child의 값으로 저장시켜준다.
- map 내 parent의 값으로 node를 저장시켜준다.
- 문제 풀이에 필요한 변수를 정의한다.
- 위의 반복이 완료되면 다시 descriptions 내 각 배열들의 첫 번째 값이 children에 존재하지 않은 값을 찾아 map에서 해당 노드를 찾아 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기