1 /*
2 public class TreeNode {
3 int val = 0;
4 TreeNode left = null;
5 TreeNode right = null;
6
7 public TreeNode(int val) {
8 this.val = val;
9
10 }
11
12 }
13 */
14 import java.lang.StringBuilder;
15 //序列化 思路:
16 // 先序遍历 节点不为空时存入val, 节点为空时 存入#,
17 //加入逗号的目的 是为了拆分方便
18 public class Solution {
19 StringBuilder bulider=new StringBuilder();
20 int index=-1;//字符数组指针
21 String Serialize(TreeNode root) {
22 if(root==null) return bulider.append("#,").toString();
23 bulider.append(root.val+",");
24 Serialize(root.left);
25 Serialize(root.right);
26 return bulider.toString();
27 }
28 //反序列化 把字符串拆分为字符数组 只要不为#就是前一节点的左子节点
29 //遇到# 就回溯为上一节点的右子节点
30 //建立二叉树的规则 是 根左右
31 TreeNode Deserialize(String str){
32 String[]strlist=str.split(",");
33 return Mydeserizlize(strlist);
34 }
35
36 TreeNode Mydeserizlize(String[] strlist){
37 index++;
38 TreeNode root=null;//递归时每次都要新建新节点 不能把root作为全局变量
39 if(!strlist[index].equals("#")){
40 root=new TreeNode(Integer.valueOf(strlist[index]));
41 root.left=Mydeserizlize(strlist);
42 root.right=Mydeserizlize(strlist);
43 }
44 return root;
45 }
46
47 }