import java.util.*;
class Node {
int val;
List<Node> children;
Node(int val) {
this.val = val;
this.children = new ArrayList<>();
}
}
class Codec {
// Encodes an n-ary tree to a single string.
public String serialize(Node root) {
if (root == null) {
return "";
}
StringBuilder sb = new StringBuilder();
serializeHelper(root, sb);
return sb.toString();
}
private void serializeHelper(Node node, StringBuilder sb) {
if (node == null) {
return;
}
sb.append(node.val).append(",");
sb.append(node.children.size()).append(",");
for (Node child : node.children) {
serializeHelper(child, sb);
}
}
// Decodes your encoded data to tree.
public Node deserialize(String data) {
if (data.isEmpty()) {
return null;
}
String[] tokens = data.split(",");
Queue<String> queue = new LinkedList<>(Arrays.asList(tokens));
return deserializeHelper(queue);
}
private Node deserializeHelper(Queue<String> queue) {
int val = Integer.parseInt(queue.poll());
int numChildren = Integer.parseInt(queue.poll());
Node node = new Node(val);
for (int i = 0; i < numChildren; i++) {
node.children.add(deserializeHelper(queue));
}
return node;
}
}