题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。

对于处理二叉树的题目的几种思路:
(1)递归
(2)使用栈
(3)使用队列
连续刷的这几道题目都适用

import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    String Serialize(TreeNode root) {
        StringBuilder result = new StringBuilder("");
        if(root != null){
            //先访问根节点
            result.append(String.valueOf(root.val));
            //offer poll peek
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            queue.offer(root);//需要根据队列中存储的元素来作为访问下一个节点的依据。
            while(!queue.isEmpty()){
                //把队列元素的左右子树进行访问,然后加入到队列中。
                TreeNode head = queue.poll();
                if(head.left!= null || head.right!= null){
                    if(head.left == null)
                        result.append(",#");
                    else{
                        result.append("," + String.valueOf(head.left.val));