250x250
Notice
Recent Posts
Recent Comments
Link
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- spring boot
- math
- scanner
- union_find
- string
- List
- javascript
- NIO
- Java
- priority_queue
- Calendar
- 스택
- date
- 힙덤프
- html
- JPA
- CSS
- alter
- 리소스모니터링
- 스프링부트
- Properties
- 큐
- BFS
- GC로그수집
- Union-find
- deque
- map
- dfs
- set
- sql
Archives
- Today
- Total
매일 조금씩
Leet code (Hard): 297. Serialize and Deserialize Binary Tree - Java 본문
알고리즘/Tree
Leet code (Hard): 297. Serialize and Deserialize Binary Tree - Java
mezo 2024. 10. 30. 01:17728x90
반응형
TreeNode 객체로 root 가 주어지면 주어진 두 메서드를 완성해서 serialize, deserialize 하여 입력 그대로의 root를 리턴하는 문제이다.
serialize 메서드는 String을 리턴해야해서 TreeNode를 돌며 노드를 String으로 붙여나가야하는데
String의 +보다 StringBuilder의 append()를 써서 붙여나가는 것이 훨~~~씬 더 빠르다.
String으로 + 하면서 붙이면 그때그때 계속 객체를 생성해야하기 때문..
deserialize 메서드는 String을 받아서 TreeNode를 리턴해야한다.
serialize, deserialize 둘 다 Queue를 사용했다.
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root == null) return "";
StringBuilder output = new StringBuilder();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(node == null){
output.append("#,");
}else{
output.append(node.val).append(",");
queue.offer(node.left);
queue.offer(node.right);
}
}
return output.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if(data == "") return null;
String[] tree = data.split(",");
TreeNode root = new TreeNode(Integer.parseInt(tree[0]));
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int child = 1;
while(!queue.isEmpty()){
TreeNode node = queue.poll();
if(!tree[child].equals("#")){
TreeNode left = new TreeNode(Integer.parseInt(tree[child]));
node.left = left;
queue.offer(left);
}
child++;
if(!tree[child].equals("#")){
TreeNode right = new TreeNode(Integer.parseInt(tree[child]));
node.right = right;
queue.offer(right);
}
child++;
}
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));
728x90
반응형
'알고리즘 > Tree' 카테고리의 다른 글
Leet code (Medium): 105. Construct Binary Tree from Preorder and Inorder Traversal - Java (0) | 2024.11.01 |
---|---|
Leet code (Easy): 572. Subtree of Another Tree - Java (0) | 2024.10.30 |
Leet code (Medium): 102. Binary Tree Level Order Traversal - Java (0) | 2024.10.29 |
Leet code (Hard): 124. Binary Tree Maximum Path Sum - Java (1) | 2024.10.29 |
Leet code (Easy): 226. Invert Binary Tree - Java (1) | 2024.10.28 |