Skip to content

Commit 3efc530

Browse files
committed
449. 序列化和反序列化二叉搜索树
1 parent 0ffd017 commit 3efc530

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.gatsby;
2+
3+
import java.util.ArrayDeque;
4+
import java.util.LinkedList;
5+
import java.util.Queue;
6+
7+
/**
8+
* @classname _449SerializeAndDeserializeBST
9+
* @description:
10+
* @author: bgm
11+
* @create: 2022/9/30
12+
**/
13+
14+
class Codec {
15+
private TreeNode root;
16+
17+
public String serialize(TreeNode root) {
18+
this.root = root;
19+
return "";
20+
}
21+
22+
public TreeNode root(String data) {
23+
return root;
24+
}
25+
}
26+
27+
public class _449SerializeAndDeserializeBST {
28+
public String serialize(TreeNode root) {
29+
if (root == null) {
30+
return "#";
31+
}
32+
Queue<TreeNode> queue = new ArrayDeque<>();
33+
queue.add(root);
34+
StringBuilder stringBuilder = new StringBuilder();
35+
while (queue.size() > 0) {
36+
TreeNode node = queue.poll();
37+
stringBuilder.append("#");
38+
if (node != null) {
39+
queue.add(root.left);
40+
queue.add(root.right);
41+
stringBuilder.append(node.val);
42+
}
43+
}
44+
return stringBuilder.toString();
45+
}
46+
47+
public TreeNode deserialize(String data) {
48+
if (data.equals("#")) {
49+
return null;
50+
}
51+
String s[] = data.split("#", -1);
52+
TreeNode ans = new TreeNode(Integer.parseInt(s[1]));
53+
Queue<TreeNode> q = new LinkedList<>();
54+
q.add(ans);
55+
for (int i = 3; i < s.length; i += 2) {
56+
TreeNode t = q.poll();
57+
if (s[i - 1].length() > 0) {
58+
t.left = new TreeNode(Integer.parseInt(s[i - 1]));
59+
q.add(t.left);
60+
}
61+
if (s[i].length() > 0) {
62+
t.right = new TreeNode(Integer.parseInt(s[i]));
63+
q.add(t.right);
64+
}
65+
}
66+
return ans;
67+
}
68+
}

0 commit comments

Comments
 (0)