297. Serialize and Deserialize Binary Tree

一、题目

  1、审题 

 

  2、分析

    将二叉树的结构序列化为字符串形式表示,在通过这个字符串形式将此二叉树的结构展示出来!

 

二、解答

  1、思路

    序列化过程: 将二叉数以先序遍历的方式展示,并且使用 “X” 代表一个 null 节点,而且每个节点之间采用 “,”隔开。可以采用一个 StringBuilder 来记录增加的字符串。

    反序列化过程: 使用一个队列 Queue 存储上一步序列化的节点,当构建子树时,出现 X 代表此子树结束。继续构架下一个分支。

 1     private static final String spliter = ",";
 2     private static final String NN = "X";
 3     
 4     // Encodes a tree to a single string.
 5     public String serialize(TreeNode root) {
 6         StringBuilder sb = new StringBuilder();
 7         buildString(root, sb);
 8         return sb.toString();
 9     }
10 
11     private void buildString(TreeNode root, StringBuilder sb) {
12         if(root == null)
13             sb.append(NN).append(spliter);
14         else {
15             sb.append(root.val).append(spliter);
16             buildString(root.left, sb);
17             buildString(root.right, sb);
18         }
19     }
20 
21     // Decodes your encoded data to tree.
22     public TreeNode deserialize(String data) {
23         Deque<String> nodes = new LinkedList<>();
24         nodes.addAll(Arrays.asList(data.split(spliter)));
25         return buildTree(nodes);
26     }
27 
28     private TreeNode buildTree(Deque<String> nodes) {
29         String val = nodes.remove();
30         if(val.equals(NN))
31             return null;
32         else {
33             TreeNode node = new TreeNode(Integer.valueOf(val));
34             node.left = buildTree(nodes);
35             node.right = buildTree(nodes);
36             return node;
37         }
38     }

 

    

posted @ 2018-11-27 16:21  skillking2  阅读(40)  评论(0编辑  收藏