请实现两个函数,分别用来序列化和反序列化二叉树。
#####理解:
序列化二叉树就是要按照一个固定的序列模式对结点进行排序,反序列化只要按照同样的规则复原即可。
这里采用前序遍历的方式,创建一个StringBuffer()对象方便改变字符串内容,按照父结点->左->右的顺序依次序列化,其中子结点均为递归调用。
需要注意的是:一定要对null结点进行同样的序列化标记,这样才能正常返回,给予递归以终止条件,同时方便反序列化时的处理。
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
String Serialize(TreeNode root) {
StringBuffer sb = new StringBuffer();
if(root == null){//这块处理不可或缺,对于null同样要做出合适标记,且返回
sb.append("#,");
return sb.toString();
}
sb.append(root.val+",");
sb.append(Serialize(root.left));//递归
sb.append(Serialize(root.right));
return sb.toString();
}
int index = -1;
TreeNode Deserialize(String str) {
index++;
int len = str.length(); //获得序列长度
String[] st = str.split(","); //分离得到每一个成员的内容
TreeNode node = null;
if(index > len){
return null;
}
if(!st[index].equals("#")){
node = new TreeNode(Integer.valueOf(st[index]));//parseInt()
node.left = Deserialize(str);
node.right = Deserialize(str);
}
return node;
}
}