序列化(serialization)在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。
实现二叉树的序列化与反序列化
思路:
- 前序遍历过程中,每遇到一个节点,将值加入字符串中,以“,”分隔,遇到空节点,以“#” 标识
- 反序列化过程,每遇到一个节点,前序构造二叉树
(关键点:以#表示空节点,因为单靠前序序列无法重构二叉树)
public class Solution {
private int index=-1;//递归下标
String Serialize(TreeNode root) {
StringBuilder sb=new StringBuilder();
if(root==null)
{
sb.append("#,");
return sb.toString();
}
sb.append(root.val+","); //Java中基本类型int与字符串相加进行拼接操作
sb.append(Serialize(root.left));
sb.append(Serialize(root.right));
return sb.toString();
}
TreeNode Deserialize(String str) {
index++;//当前访问的节点后移动
String[] strr=str.split(",");
TreeNode root=null;
if(strr[index].equals("#"))//Java中判断值相等不用 == 采用 equals方法
return null;
root=new TreeNode(Integer.valueOf(strr[index]));
root.left=Deserialize(str);
root.right=Deserialize(str);
return root;
}
}