牛客地址
解题思路
先序遍历序列化
- 如果是null,则表示为#,先序遍历序列化。
- 否则表示为node.val,
反序列化
利用一个全局变量。如果非空,则继续递归创建。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
private StringBuilder sb = new StringBuilder();
private int index = -1;
String Serialize(TreeNode root) {
if(root == null){
return "";
}
SerializeCore(root);
return sb.toString();
}
void SerializeCore(TreeNode root){
if(root == null){
sb.append("#,");
return;
}
sb.append(root.val);
sb.append(",");
SerializeCore(root.left);
SerializeCore(root.right);
}
TreeNode Deserialize(String str) {
if(str == null || "".equals(str)){
return null;
}
String[] strs = str.split(",");
return DeserializeCore(strs);
}
TreeNode DeserializeCore(String[] strs){
index ++;
TreeNode root = null;
if(strs[index].equals("#")){
return null;
}
else{
root = new TreeNode(Integer.parseInt(strs[index]));
root.left = DeserializeCore(strs);
root.right = DeserializeCore(strs);
}
return root;
}
}