297. Serialize and Deserialize Binary Tree

1、題目node

  一、審題 app

 

  二、分析ui

    將二叉樹的結構序列化爲字符串形式表示,在經過這個字符串形式將此二叉樹的結構展現出來!spa

 

2、解答code

  一、思路blog

    序列化過程: 將二叉數以先序遍歷的方式展現,而且使用 「X」 表明一個 null 節點,並且每一個節點之間採用 「,」隔開。能夠採用一個 StringBuilder 來記錄增長的字符串。隊列

    反序列化過程: 使用一個隊列 Queue 存儲上一步序列化的節點,當構建子樹時,出現 X 表明此子樹結束。繼續構架下一個分支。rem

 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     }
相關文章
相關標籤/搜索