题目
略
答案
这题能不能用类似Serialize and Deserialize Binary Tree的方法呢?
即, 每当遇到一个子树的child为null时,插入一个#。
但是对于这题来说,每个node的子树数目并不一样。
那么可以尝试在遍历完一个node的所有children之后插入一个#
deserialize时,如果看到这个#就知道对于当前root来说,所有children都结束了
class Codec {
public Node deserialize(String data) {
String arr[] = data.split(" ");
if(data.equals("")) return null;
int[] idx = new int[1];
return deserialize_help(arr, idx);
}
private Node deserialize_help(String[] arr, int[] idx) {
if(idx[0] >= arr.length) return null;
if(arr[idx[0]].equals("#")) {
idx[0]++;
return null;
}
int root_val = Integer.parseInt(arr[idx[0]]);
Node root = new Node(root_val, new ArrayList<>());
idx[0]++;
int i = 0;
while(true) {
Node ret = deserialize_help(arr, idx);
if(ret == null) break;
root.children.add(ret);
i++;
}
return root;
}
// Encodes a tree to a single string.
public String serialize(Node root) {
if(root == null) return "";
String ret = Integer.toString(root.val);
for(int i = 0; i < root.children.size(); i++) {
ret += " " + serialize(root.children.get(i));
}
ret += " #";
return ret;
}
}
网友评论