1.题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
传送门
2.code(java1.7版本)
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public int index=-1;
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();
}
TreeNode Deserialize(String str) {
index++;
TreeNode node=null;
String[] ch=str.split(",");
if(index>=ch.length)return null;
if(!ch[index].equals("#")){
node=new TreeNode(Integer.valueOf(ch[index]));
node.left=Deserialize(str);
node.right=Deserialize(str);
}
return node;
}
}
3.题目分析
根据前序遍历规则完成序列化与反序列化。所谓序列化指的是遍历二叉树为字符串;所谓反序列化指的是依据字符串重新构造成二叉树。依据前序遍历序列来序列化二叉树,因为前序遍历序列是从根结点开始的。当在遍历二叉树时碰到Null指针时,这些Null指针被序列化为一个特殊的字符“#”。另外,结点之间的数值用逗号隔开。