设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。
如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。
这里利用二叉树的前序遍历来序列化和反序列化代码如下:
private string Serialize(TreeNode root)
{
StringBuilder sb = new StringBuilder();
if (root == null)
{
sb.Append("#,");
return sb.ToString();
}
sb.Append(root.val + ",");
sb.Append(Serialize(root.left));
sb.Append(Serialize(root.right));
return sb.ToString();
}
//反序列化
private int index = -1; //标记当前遍历到哪个节点
private TreeNode Deserialize(string s)
{
index++;
string[] strs = s.Split(',');
TreeNode node=null;
if (!strs[index].Equals("#"))
{
node=new TreeNode(Convert.ToInt32(strs[index]));
node.left = Deserialize(s);
node.right = Deserialize(s);
}
return node;
}