public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder s = new StringBuilder();
dfs_s(s, root);
return s.toString();
}
private void dfs_s(StringBuilder s, TreeNode root) {
if (root == null) {
s.append("null ");
return;
} else {
s.append(root.val).append(" ");
}
dfs_s(s, root.left);
dfs_s(s, root.right);
}
int curr;
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
curr = 0;
data = data.trim();
String[] s = data.split(" ");
return dfs_d(s);
}
private TreeNode dfs_d(String[] s) {
if (curr == s.length) {
return null;
}
String s1 = s[curr];
if (s1.equals("null")) {
curr++;
return null;
}
int i = Integer.parseInt(s1);
TreeNode root = new TreeNode(i);
curr++;
root.left = dfs_d(s);
root.right = dfs_d(s);
return root;
}
}
这道题也没说按照什么方式序列化,反正是序列化成一个字符串能够反序列化就行了
我的思路是按照先序遍历的思路进行序列化,看代码应该能看得懂,我画的有点抽象