题目描述
时间限制:1秒 空间限制:32768K
请实现两个函数,分别用来序列化和反序列化二叉树
解题思路
题目描述有问题。。。样例也没有。。。
(1)序列化:看了大家的讨论才知道这道题序列化的意思。例如下面树的序列化:(前序遍历)
8
/ \
7 4
/ / \
6 3 2
序列化为:8,7,6,#,#,#4,3,#,#,2,#,#
(2)反序列化:前序遍历建树。
代码(Java)
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public class Main {
//当前访问树序列化的序号
static int index = -1;
//序列化,这里前序遍历,序列化后为8,7,6,#,#,#4,3,#,#,2,#,#,
public static String Serialize(TreeNode root) {
StringBuffer ans = new StringBuffer();
if(root == null) {
ans.append("#,");
return ans.toString();
}
ans.append(root.val+",");
ans.append(Serialize(root.left));
ans.append(Serialize(root.right));
return ans.toString();
}
//反序列化
public static TreeNode Deserialize(String str) {
index++;
String[] nodes = str.split(",");
if(index >= nodes.length)return null;
TreeNode ans = null;
//空结点直接返回空
while(!nodes[index].equals("#")) {
ans = new TreeNode(Integer.valueOf(nodes[index]));
ans.left = Deserialize(str);
ans.right = Deserialize(str);
}
return ans;
}
/*
测试代码
*/
public static void main(String []args){
}
}