import java.util.*;
public class Solution {
    String Serialize(TreeNode root) {
        if(root == null) return "#"; // 对所有的空节点也要存储占位符号"#"
        return root.val + "," + Serialize(root.left) + "," + Serialize(root.right);    // 递归前序遍历返回字符串
    }
    TreeNode Deserialize(String str) {
        String[] s = str.split(",");                             // 切分字符串
        Queue<String> queue = new LinkedList<String>();
        for(String s1 : s){
            queue.offer(s1);
        }
        return de(queue);
    }
    TreeNode de(Queue<String> queue) {
        String s = queue.poll();                                // 递归函数每次从队首读出一个元素,因此读出的顺序也是前序
        if(s.equals("#")) return null;                          // 对递归推出条件之一进行处理
        TreeNode head = new TreeNode(Integer.valueOf(s));       // 前序首先建立一个节点
        head.left = de(queue);                                  // 然后递归左右子节点
        head.right = de(queue);
        return head;
    }
}