题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
思路:
其实这个里面包含一个二叉树的序列化而反序列化,这里的序列化指代的是将一颗二叉树没有访问的顺序,然后通过序列化,将这颗二叉树转化为有访问的顺序。所以序列化的时候给我的是一个根节点,然后我通过先序遍历,将这颗树进行序列化,然后转化为一个字符串,空的节点指针则为#表示。
而反序列化,则是给我一个序列化的字符串,然后我将这个字符创通过反序列化转化为一颗二叉树。所以我需要不断的判断这个字符创中的字符是否是#字符。
实现:
/*
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 sb = new StringBuffer();
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();
}
TreeNode Deserialize(String str) {
//反序列化二叉树则是需要将一个二叉树组成的字符创进行反序列化,然后得到这个
//字符串表示的二叉树
index ++;
int length = str.length();
if(index >= lengt
mnh){
return null;
}
String[] strr = str.split(",");
TreeNode node = null;
while(!strr[index].equals("#")){
node = new TreeNode(Integer.valueOf(strr[index]));
node.left = Deserialize(str);
node.right = Deserialize(str);
}
return node;
}
}