码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]428. Serialize and Deserialize N-ary Tree序列化与反序列化N叉树

时间:2018-11-02 17:18:05      阅读:396      评论:0      收藏:0      [点我收藏+]

标签:dal   val   res   cross   ring   instant   should   tree   restrict   

Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.

Design an algorithm to serialize and deserialize an N-ary tree. An N-ary tree is a rooted tree in which each node has no more than N children. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that an N-ary tree can be serialized to a string and this string can be deserialized to the original tree structure.

For example, you may serialize the following 3-ary tree

 

 

 

 

思路

1.  preorder recursive traversal

2. add number of children after root val, in order to know when to terminate 

1 3 3 2 5 0 6 0 2 0 4

 

代码

 1 /*
 2 // Definition for a Node.
 3 class Node {
 4     public int val;
 5     public List<Node> children;
 6 
 7     public Node() {}
 8 
 9     public Node(int _val,List<Node> _children) {
10         val = _val;
11         children = _children;
12     }
13 };
14 */
15 class Codec {
16  // Encodes a tree to a single string.
17     public String serialize(Node root) {
18         List<String> list = new LinkedList<>();
19         buildString(root, list);
20         return String.join(",", list);
21     }
22 
23     private void buildString(Node root, List<String> list) {
24         if (root == null) return;
25 
26         list.add(String.valueOf(root.val));
27         list.add(String.valueOf(root.children.size()));
28         for (Node child : root.children) {
29             buildString(child, list);
30         }
31 
32     }
33 
34     // Decodes your encoded data to tree.
35     public Node deserialize(String data) {
36         if (data.length() == 0) return null;
37         String[] strArr = data.split(",");
38         Queue<String> queue = new LinkedList<>();
39         Collections.addAll(queue, strArr);
40         return buildTree(queue);
41     }
42 
43     private Node buildTree(Queue<String> queue) {
44         // match the given constructor form
45         Node root = new Node();
46         root.val = Integer.parseInt(queue.poll());
47         int size = Integer.parseInt(queue.poll());
48         root.children = new ArrayList<>(size);
49         for (int i = 0; i < size; i++) {
50             root.children.add(buildTree(queue));
51         }
52         return root;
53     }
54 }
55 
56 
57 // Your Codec object will be instantiated and called as such:
58 // Codec codec = new Codec();
59 // codec.deserialize(codec.serialize(root));

 

[leetcode]428. Serialize and Deserialize N-ary Tree序列化与反序列化N叉树

标签:dal   val   res   cross   ring   instant   should   tree   restrict   

原文地址:https://www.cnblogs.com/liuliu5151/p/9897169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!