/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
String ss;
int k;
String Serialize(TreeNode root) {//序列化 通过深搜不断先序遍历遍历二叉树
ss=new String();
dfs(root);
return ss;
}
void dfs(TreeNode tree){///以先序的形式进行序列化
if(tree==null) {///如果为null 加上 #!
ss=ss+"#!";
return;
}
int m=tree.val;
String s1=String.valueOf(m);//将结点值 加入字符串
ss=ss+s1;
ss=ss+"!";
dfs(tree.left);//不断深搜
dfs(tree.right);
}
TreeNode Deserialize(String str) {//反序列化 通过 !来分割出结点
if(str==null)return null;
String s[]=str.split("!");
k=-1;
return build(s);//通过递归的方式来建树
}
TreeNode build(String s[]){
k++;//记录当时数组位置 即结点位置
// if(k>=s.length) return null;
if(s[k].equals("#"))// if(s[k]=="#") 空结点
return null;
int m=Integer.parseInt(s[k]);//取值
TreeNode tree=new TreeNode(m);//生成结点
tree.left=build(s);//通过递归的方式来建树
tree.right=build(s);
return tree;
}
}
序列化二叉树
最新推荐文章于 2020-10-31 08:55:16 发布