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 }