知识点/数据结构:二叉树
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
注意点
这些经典的数据操作一定熟记住
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public String Serialize(TreeNode root) {
if(root==null){
//这里需要返回空的字符串!!!!!自己开始写的null
return "";
}
StringBuilder sb= new StringBuilder();
Serialize2(root,sb);
return sb.toString();
}
public void Serialize2(TreeNode root,StringBuilder sb){
if(root==null){
//一定注意!!!这里是“#,”。因为在反序列化的时候需要根据“,”来分割。
//因为是字符串,所以可以一起放进来。
sb.append("#,");
return;
}
sb.append(root.val);
sb.append(",");
//这里利用递归,因为是前序遍历,所以这样递归。
//自己调皮了一下,把left和right换了一下。2018.10.3
Serialize2(root.left,sb);
Serialize2(root.right,sb);
}
int index=-1;
public TreeNode Deserialize(String str) {
//这里需要判断字符串长度是不是0
if(str.length()==0){
return null;
}
String []strs =str.split(",");
return Deserialize2(strs);
}
public TreeNode Deserialize2( String []strs){
index++; //初始值为-1,++后第一个值为str【0】
if(!strs[index].equals("#")){
//开始这个自己的位置放在了上边
//这是初始化一个节点,容器
TreeNode root=new TreeNode(0);
root.val=Integer.parseInt(strs[index]);
//函数的返回值是一个树的节点
root.left=Deserialize2(strs);
root.right=Deserialize2(strs);
return root;
}
return null;
}
}