Skip to content

Commit 1cd1709

Browse files
committed
serialize and deserialize BST
1 parent 3933ada commit 1cd1709

File tree

3 files changed

+144
-33
lines changed

3 files changed

+144
-33
lines changed

.idea/workspace.xml

Lines changed: 64 additions & 33 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,3 +384,4 @@ codes may not be optimized
384384
1. [Find K Closest Element](https://leetcode.com/contest/leetcode-weekly-contest-45/problems/find-k-closest-elements/)
385385
1. [Validate UTF-8](https://leetcode.com/problems/utf-8-validation/description/)
386386
1. [Kth Smallest Element in a BST](https://leetcode.com/problems/kth-smallest-element-in-a-bst/description/)
387+
1. [Serialize and Deserialize BST](https://leetcode.com/problems/serialize-and-deserialize-bst/description/)
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.github.chen0040.leetcode.day18.medium;
2+
3+
4+
import java.util.LinkedList;
5+
import java.util.Queue;
6+
7+
8+
/**
9+
* Created by xschen on 13/8/2017.
10+
*
11+
* link: https://leetcode.com/problems/serialize-and-deserialize-bst/description/
12+
*/
13+
public class SerializeAndDeserializeBST {
14+
public class TreeNode {
15+
int val;
16+
TreeNode left;
17+
TreeNode right;
18+
TreeNode(int x) { val = x; }
19+
}
20+
21+
public class Codec {
22+
23+
// Encodes a tree to a single string.
24+
public String serialize(TreeNode root) {
25+
StringBuilder sb = new StringBuilder();
26+
Queue<TreeNode> queue = new LinkedList<TreeNode>();
27+
queue.add(root);
28+
boolean first = true;
29+
while(!queue.isEmpty()) {
30+
TreeNode x = queue.remove();
31+
if(first){
32+
first = false;
33+
} else {
34+
sb.append(",");
35+
}
36+
if(x == null){
37+
sb.append("#");
38+
} else {
39+
sb.append(x.val);
40+
queue.add(x.left);
41+
queue.add(x.right);
42+
}
43+
}
44+
return sb.toString();
45+
}
46+
47+
// Decodes your encoded data to tree.
48+
public TreeNode deserialize(String data) {
49+
String[] values = data.split(",");
50+
Queue<TreeNode> queue = new LinkedList<TreeNode>();
51+
52+
int count = 0;
53+
TreeNode root = create(values, count++);
54+
queue.add(root);
55+
while(count < values.length) {
56+
TreeNode x = queue.remove();
57+
x.left = create(values, count++);
58+
x.right = create(values, count++);
59+
60+
if(x.left != null) {
61+
queue.add(x.left);
62+
}
63+
if(x.right != null) {
64+
queue.add(x.right);
65+
}
66+
}
67+
return root;
68+
}
69+
70+
private TreeNode create(String[] values, int count) {
71+
if(values[count].equals("#")) {
72+
return null;
73+
}
74+
return new TreeNode(Integer.parseInt(values[count]));
75+
}
76+
77+
78+
}
79+
}

0 commit comments

Comments
 (0)