Skip to content

Commit 6d24d46

Browse files
authored
Update Serialize and Deserialize BST.java
1 parent f1a24c0 commit 6d24d46

File tree

1 file changed

+33
-37
lines changed

1 file changed

+33
-37
lines changed

Medium/Serialize and Deserialize BST.java

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -10,48 +10,44 @@
1010
public class Codec {
1111

1212
// Encodes a tree to a single string.
13-
public String serialize(TreeNode root) {
14-
if (root == null) {
15-
return "";
13+
public String serialize(TreeNode root) {
14+
if (root == null) {
15+
return "#";
16+
}
17+
StringBuilder sb = new StringBuilder();
18+
dfsSerialize(root, sb);
19+
return sb.toString().trim();
1620
}
17-
StringBuilder sb = new StringBuilder();
18-
dfs(root, sb);
19-
return sb.toString().trim();
20-
}
21-
22-
private void dfs(TreeNode root, StringBuilder sb) {
23-
if (root == null) {
24-
return;
21+
22+
private void dfsSerialize(TreeNode root, StringBuilder sb) {
23+
if (root == null) {
24+
sb.append("#").append(" ");
25+
return;
26+
}
27+
sb.append(root.val).append(" ");
28+
dfsSerialize(root.left, sb);
29+
dfsSerialize(root.right, sb);
2530
}
26-
sb.append(root.val).append(" ");
27-
dfs(root.left, sb);
28-
dfs(root.right, sb);
29-
}
3031

31-
// Decodes your encoded data to tree.
32-
public TreeNode deserialize(String data) {
33-
if (data.length() == 0) {
34-
return null;
32+
// Decodes your encoded data to tree.
33+
public TreeNode deserialize(String data) {
34+
Queue<String> queue = new LinkedList<>(Arrays.asList(data.split("\\s+")));
35+
return dfsDeserialize(queue);
3536
}
36-
String[] split = data.split("\\s+");
37-
return buildBST(split, 0, split.length - 1);
38-
}
39-
40-
private TreeNode buildBST(String[] data, int start, int end) {
41-
if (start > end) {
42-
return null;
37+
38+
private TreeNode dfsDeserialize(Queue<String> queue) {
39+
if (queue.isEmpty()) {
40+
return null;
41+
}
42+
String removed = queue.remove();
43+
if (removed.equals("#")) {
44+
return null;
45+
}
46+
TreeNode root = new TreeNode(Integer.parseInt(removed));
47+
root.left = dfsDeserialize(queue);
48+
root.right = dfsDeserialize(queue);
49+
return root;
4350
}
44-
TreeNode root = new TreeNode(Integer.parseInt(data[start]));
45-
int index;
46-
for (index = start; index <= end; index++) {
47-
if (Integer.parseInt(data[index]) > Integer.parseInt(data[start])) {
48-
break;
49-
}
50-
}
51-
root.left = buildBST(data, start + 1, index - 1);
52-
root.right = buildBST(data, index, end);
53-
return root;
54-
}
5551
}
5652

5753
// Your Codec object will be instantiated and called as such:

0 commit comments

Comments
 (0)