剑指offer第六十一题。
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
解题思路
比较简单的解题思路是:层序遍历二叉树,将这遍历结果组装成字符串,那么序列化就完成了。下面就是根据这个字符串想办法再还原为原来的二叉树。
我的答案
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 
 | import java.util.LinkedList;public class Solution {
 String Serialize(TreeNode root) {
 
 LinkedList<TreeNode> queue = new LinkedList<>();
 StringBuilder sb = new StringBuilder();
 if(root == null){
 return null;
 }
 queue.push(root);
 while(!queue.isEmpty()){
 TreeNode node = queue.pop();
 if(node != null){
 queue.add(node.left);
 queue.add(node.right);
 sb.append(node.val+",");
 }else{
 sb.append("#,");
 }
 }
 if(sb.length() != 0){
 sb.deleteCharAt(sb.length()-1);
 }
 return sb.toString();
 }
 
 TreeNode Deserialize(String str) {
 TreeNode root = null;
 if(str == null || str.trim().length() == 0){
 return null;
 }
 
 String[] strChar = str.split(",");
 
 TreeNode[] nodeArr = new TreeNode[strChar.length];
 
 for(int i=0;i<strChar.length;i++){
 if(!strChar[i].equals("#")){
 nodeArr[i] = new TreeNode(Integer.valueOf(strChar[i]));
 }
 }
 
 for(int i=0,j=1;i<strChar.length&&j<strChar.length;i++){
 if(nodeArr[i] != null){
 nodeArr[i].left = nodeArr[j++];
 nodeArr[i].right = nodeArr[j++];
 }
 }
 return nodeArr[0];
 }
 }
 
 |