import java.util.*;
public class Solution {
    String Serialize(TreeNode root) {
        String res = "";
        if(root == null) return res;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.add(root);
        while (queue.size() != 0) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode cur = queue.poll();
                if (cur != null){
                    res = res + cur.val + " ";
                    queue.add(cur.left);
                    queue.add(cur.right);
                }else {
                    res += "# ";
                }
            }
        }
        return res;
    }
    TreeNode Deserialize(String str) {
        if (str.equals("")){
            return null;
        }
        String[] strs = str.split(" ");
        Queue<TreeNode> queue = new LinkedList<>();
        TreeNode res = new TreeNode(Integer.parseInt(strs[0]));
        queue.offer(res);
        for (int i = 1; i < strs.length; i = i + 2) {
            TreeNode temp = queue.poll();
            if (!strs[i].equals("#")){
                temp.left = new TreeNode(Integer.parseInt(strs[i]));
                queue.add(temp.left);
            }
            if (!strs[i + 1].equals("#")){
                temp.right = new TreeNode(Integer.parseInt(strs[i + 1]));
                queue.add(temp.right);
            }
        }
        return res;
    }
}