449. Serialize and Deserialize BST
Serialize 用BFS 中间空格分开
Deserialize 用一个queue存起来new的TreeNode 下次调用它进行构造
1 public class Codec { 2 3 // Encodes a tree to a single string. 4 public String serialize(TreeNode root) { 5 if(root == null) return ""; 6 Queue<TreeNode> queue = new LinkedList<>(); 7 queue.offer(root); 8 int size = queue.size(); 9 StringBuilder sb = new StringBuilder(); 10 while(!queue.isEmpty()){ 11 for(int i = 0; i < size; i++){ 12 TreeNode node = queue.poll(); 13 if(node == null){ 14 sb.append("n "); 15 }else{ 16 sb.append(node.val); 17 sb.append(" "); 18 queue.offer(node.left); 19 queue.offer(node.right); 20 } 21 } 22 size = queue.size(); 23 } 24 return sb.toString().trim(); 25 } 26 27 // Decodes your encoded data to tree. 28 public TreeNode deserialize(String data) { 29 if(data.length() == 0) return null; 30 String[] strs = data.split(" "); 31 int i = 0, j = 1; 32 TreeNode root = new TreeNode(Integer.parseInt(strs[0])); 33 Queue<TreeNode> queue = new LinkedList<>(); 34 queue.offer(root); 35 while(!queue.isEmpty()){ 36 TreeNode node = queue.poll(); 37 if(i+2 < strs.length){ 38 if(strs[i+1].equals("n")){ 39 node.left = null; 40 }else{ 41 TreeNode left = new TreeNode(Integer.parseInt(strs[i+1])); 42 node.left = left; 43 queue.offer(left); 44 } 45 if(strs[i+2].equals("n")){ 46 node.right = null; 47 }else{ 48 TreeNode right = new TreeNode(Integer.parseInt(strs[i+2])); 49 node.right = right; 50 queue.offer(right); 51 } 52 } 53 i = i+2; 54 } 55 return root; 56 57 } 58 }