Problem:
请实现两个函数,分别用来序列化和反序列化二叉树
二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。
序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),
以 ! 表示一个结点值的结束(value!)。
二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。
Solution:
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 52 53 54 55 56 57 58 59
| public class CodingInterview_037 { public static void main(String[] args) { TreeNode t=new TreeNode(1); t.left=new TreeNode(2); t.right=new TreeNode(3); CodingInterview_037 c=new CodingInterview_037(); String s=c.Serialize(t); System.out.println(s); }
int index=-1; public String Serialize(TreeNode root) { StringBuilder sb = new StringBuilder(); if(root == null){ sb.append("#,"); return sb.toString(); } sb.append(root.val + ","); sb.append(Serialize(root.left)); sb.append(Serialize(root.right)); return sb.toString(); } public TreeNode Deserialize(String str) { String[] numberArray=str.split(","); TreeNode node=DeserialzieArray(numberArray); return node; }
private TreeNode DeserialzieArray(String[] numberArray){ index++; if(numberArray[index].equals("#")){ return null; }else{ TreeNode node=new TreeNode(Integer.parseInt(numberArray[index])); node.left=DeserialzieArray(numberArray); node.right=DeserialzieArray(numberArray); return node; } }
}
|