/*
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode (int x)
{
val = x;
}
}*/
using System.Text;
using System.Collections.Generic;
class Solution
{
public string Serialize(TreeNode root)
{
StringBuilder res = new StringBuilder();
Queue<TreeNode> que = new Queue<TreeNode>();
que.Enqueue(root);
while(que.Count != 0){
for(int i = que.Count; i > 0; i--){
TreeNode cur = que.Dequeue();
if(cur == null){
res.Append("#,");
continue;
}
res.Append(cur.val);
res.Append(",");
que.Enqueue(cur.left);
que.Enqueue(cur.right);
}
}
res.Remove(res.Length - 1, 1);
return res.ToString();
}
public TreeNode Deserialize(string str)
{
if(str == "#") return null;
string[] strs = str.Split(',');
TreeNode root = new TreeNode(int.Parse(strs[0]));
Queue<TreeNode> que = new Queue<TreeNode>();
que.Enqueue(root);
int ord = 1;
while(que.Count != 0){
for(int i = que.Count; i > 0; i--){
TreeNode cur = que.Dequeue();
if(strs[ord] != "#") {
cur.left = new TreeNode(int.Parse(strs[ord]));
que.Enqueue(cur.left);
}
ord++;
if(strs[ord] != "#") {
cur.right = new TreeNode(int.Parse(strs[ord]));
que.Enqueue(cur.right);
}
ord++;
}
}
return root;
}
}