-
-
Notifications
You must be signed in to change notification settings - Fork 164
/
Copy pathSerializeDeserialize.java
69 lines (56 loc) · 1.93 KB
/
SerializeDeserialize.java
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package java1.algorithms.tree;
import java.util.*;
public class SerializeDeserialize {
private int i;
// Preorder traversal DFS: TC:O(n) SC: O(n)
private String serialize(TreeNode root) {
List<String> list = new ArrayList<>();
serializeDFS(root, list);
return String.join(",", list);
}
private void serializeDFS(TreeNode node, List<String> list) {
if(node == null) {
list.add("N");
return;
}
list.add(String.valueOf(node.value));
serializeDFS(node.left, list);
serializeDFS(node.right, list);
}
// DFS: TC:O(n) SC: O(n)
private TreeNode deserialize(String data) {
String[] tokens = data.split(",");
return deserializeDFS(tokens);
}
private TreeNode deserializeDFS(String[] tokens) {
String token = tokens[this.i];
if(token.equals("N")) {
this.i++;
return null;
}
TreeNode node = new TreeNode(Integer.parseInt(token));
this.i++;
node.left = deserializeDFS(tokens);
node.right = deserializeDFS(tokens);
return node;
}
private static void printTree(TreeNode root) {
if(root == null) return;
System.out.print(root.value + " ");
printTree(root.left);
printTree(root.right);
}
public static void main(String[] args) {
TreeNode root = new TreeNode(0);
root.left = new TreeNode(1);
root.right = new TreeNode(2);
root.left.left = new TreeNode(3);
root.left.right = new TreeNode(4);
root.right.left = new TreeNode(5);
root.right.right = new TreeNode(6);
SerializeDeserialize serializeDeserializeObj = new SerializeDeserialize();
String serializedString = serializeDeserializeObj.serialize(root);
System.out.println(serializedString);
printTree(serializeDeserializeObj.deserialize(serializedString));
}
}