剑指offer第六十一题。
题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
解题思路
比较简单的解题思路是:层序遍历二叉树,将这遍历结果组装成字符串,那么序列化就完成了。下面就是根据这个字符串想办法再还原为原来的二叉树。
我的答案
1 2 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]; } }
|