반응형
Serialize , Deserialize
- 결국 Tree를 순회해서 -> 배열 모양의 String으로 만들거나 (Serialize)
- 배열 모양의 String을 각각의 원소들로 parsing 한 배열로 만들 후, 이 배열을 순회하면서 Binary Tree 자료구조에 Binding 하는 것이다. (Deserialize)
여기서 나는, 각각에 대해 BFS 방법을 사용하고자 한다.
Serialize 에서는,
- Tree 를 BFS로 Queue에 먼저 넣어두고, Queue에서 값을 빼서 ArrayList에 넣어준다.(단, 현재 node가 null이면, null을 arrayList에 넣어준다.)
- 이렇게 만든 ArrayList를 string으로 직렬화
Deserialize 에서는
- Queue 자료구조에 들어갈 데이터 타입을 TreeNode 로 해둬야한다. (이렇게 만들어야, 현재 queue에서 빼낸 currNode의 left, right 노드를 queue에 넣을수있음)
- queue에 넣을 때 배열 index 범위를 넘으면 안되니까, left, right 마다 index를 체크해줘야함
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
List<Integer> arr = new ArrayList<>();
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
while(!q.isEmpty()) {
TreeNode currNode = q.poll();
Integer currVal = currNode == null ? null : currNode.val;
arr.add(currVal);
if(currNode != null) {
q.add(currNode.left);
q.add(currNode.right);
}
}
return arr.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
data = data.substring(1, data.length() -1);
String[] arr = data.split(", ");
if(arr.length == 0 || arr[0].equals("null")) return null;
List<Integer> list = new ArrayList<>();
for(String item : arr) {
if(item.equals("null")) list.add(null);
else list.add(Integer.valueOf(item));
}
TreeNode root = new TreeNode(Integer.valueOf(list.get(0)));
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
int index = 1;
while(index < arr.length && !q.isEmpty()) {
TreeNode curr = q.poll();
if(list.get(index) != null && index < arr.length) {
TreeNode left = new TreeNode(list.get(index));
curr.left = left;
q.add(left);
}
index++;
if(list.get(index) != null && index < arr.length) {
TreeNode right = new TreeNode(list.get(index));
curr.right = right;
q.add(right);
}
index++;
}
return root;
}
}
반응형
'알고리즘_개념 및 문제풀이 ' 카테고리의 다른 글
leetcode 887 superEggDrop (0) | 2022.07.19 |
---|---|
206. Reverse Linked List (Leetcode) (0) | 2022.05.12 |
코딩인터뷰 마스터하기(1) - Intro (0) | 2022.05.08 |
카카오 2018 블라인드 1차 코테 기출문제 코드 모음/C++ (0) | 2020.03.26 |
BOJ/C++/DFS/BFS 문제풀이1/#2331(반복수열)/#9466(텀프로젝트)/ (0) | 2020.03.25 |