Serialize and Deserialize N-ary Tree

题目

答案

这题能不能用类似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;
    }
}

你可能感兴趣的:(Serialize and Deserialize N-ary Tree)