直接说思想了:
序列化:
直接利用层序遍历
但注意数字与数字之间需要进行划分,本题用”_“分割,否则反序列化时无法辨识多为数字

反序列化:
同样是层序遍历的思想
创建首节点并添加到队列
然后为队列弹出的元素添加结点,添加结点的同时这些结点进行入队操作
特别注意字符”串“转化成数字的情况:0-9 转化简单,但是大于一位数需要重新定义函数考虑

import java.util.*;
public class Solution {
    String Serialize(TreeNode root) {
        if(root==null){
            return "";
        }
        //直接利用层序遍历
        //注意数字与数字之间需要进行划分,本题用”_“分割,否则反序列化时无法辨识多为数字
        Queue<TreeNode> qu = new LinkedList();
        String s = "";
        qu.add(root);
        TreeNode temp = new TreeNode(root.val);
        s = s + temp.val;
        while(qu.size()!=0){
            temp = qu.poll();
            if(temp.left!=null){
                qu.add(temp.left);
                s = s +'_'+ temp.left.val;
            }else{
                s = s +'_'+"#";
            }
            if(temp.right!=null){
                qu.add(temp.right);
                s = s +'_'+ temp.right.val;
            }else{
                s = s +'_'+ "#";
            }
        }
        return s;

    }
    TreeNode Deserialize(String str) {
        if(str.length()==0){
            return null;
        }

        //同样是层序遍历的思想
        //为队列弹出的元素添加结点
        //特别注意字符”串“转化成数字的情况
        //0-9 转化简单,但是大于一位数需要重新定义函数考虑

        //双指针TreeNodetemp int ba
        String[] cs = str.split("_");

        TreeNode temp;
        int br = 0;
        TreeNode proot = new TreeNode(StringToint(cs[br]));
        Queue<TreeNode> qu = new LinkedList();

        qu.add(proot);
        while(br<cs.length&&qu.size()!=0){
            //while(ba<str.length()){
            //if(ba指向元素不是#),temp增加左结点;qu入队新节点;ba++
            temp = qu.poll();
            br++;
            if(br<cs.length&&!cs[br].equals("#")){
                temp.left = new TreeNode(StringToint(cs[br]));
                qu.add(temp.left);
            }
            //if(ba指向元素不是#),temp增加右结点;qu入队新节点;ba++
            br++;
            if(br<cs.length&&!cs[br].equals("#")){
                temp.right = new TreeNode(StringToint(cs[br]));
                qu.add(temp.right);
            }
            //

        }
        return proot;
    }
    //字符转化成字符串
    int StringToint(String s){
        char[] cs = s.toCharArray();
        int a = 0;
        for (int i = 0; i<cs.length; i++){
            a = a * 10 + (cs[i]-'0');
        }
        return a;
    }
}