import java.util.*; public class Solution { //反序列化位置 int index =0; String Serialize(TreeNode root) { if(root ==null){ return "#"; } StringBuilder res = new StringBuilder(); se(root,res); return res.toString(); } //处理序列化 private void se(TreeNode root ,StringBuilder str){ if(root==null){ str.append("#"); return; } str.append(root.val).append('!'); se(root.left,str); se(root.right,str); } TreeNode Deserialize(String str) { //空序列对应空树 if(str == "#") return null; TreeNode res = de(str); return res; } private TreeNode de(String str){ //到达叶节点,构建完毕,返回继续构建父节点 if(str.charAt(index) =='#'){ index++; //全为空节点,直接返回null return null; } //得到节点值 int val =0; //遇到分隔符或者结尾时结束 while(str.charAt(index) !='!' && index !=str.length()){ val = val *10 +((str.charAt(index)) -'0'); index ++; } //新建节点 TreeNode root = new TreeNode(val); //判断当前序列化位置 if(index==str.length()){ return root; }else{ index++; } //递归 root.left = de(str); root.right = de(str); return root; } }