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 }