428-Serialize-and-Deserialize-N-ary-Tree
0x0 题目详情
0x1 解题思路
0x2 实现代码
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Codec {
// Encodes a tree to a single string.
public String serialize(Node root) {
if(root==null){
return "";
}
StringBuilder sb=new StringBuilder();
recur(root,sb);
return sb.toString();
}
private void recur(Node root,StringBuilder sb){
sb.append(root.val).append("_");
//序列化当前节点的子节点个数
sb.append(root.children.size()).append("_");
for(int i=0;i<root.children.size();i++){
recur(root.children.get(i),sb);
}
}
// Decodes your encoded data to tree.
public Node deserialize(String data) {
if(data==null || data.length()==0){
return null;
}
String[] source=data.split("_");
LinkedList<String> queue=new LinkedList<>();
//将每个节点值放入队列中
for(int i=0;i<source.length;i++){
queue.offerLast(source[i]);
}
return rebuild(queue);
}
private Node rebuild(LinkedList<String> queue){
String value=queue.pollFirst();
//获取当前节点的子节点个数
int size=Integer.valueOf(queue.pollFirst());
Node root=new Node(Integer.valueOf(value),new ArrayList<Node>(size));
for(int i=0;i<size;i++){
root.children.add(rebuild(queue));
}
return root;
}
}0x3 课后总结
Last updated