序列化与反序列化,用前序遍历,因为inorder 和 postorder都找不到root
public class Serialization {
static String serialize(TreeNode root)
{
if(root==null)return "#";
else
{
return root.val+serialize(root.left)+serialize(root.right);
}
}
static List<Character> str2list(String s)
{
List<Character> list=new LinkedList<Character>();
for(int i=0;i<s.length();i++)list.add(s.charAt(i));
return list;
}
static TreeNode deserialize(List<Character> list)
{
char c=list.remove(0);
if(c=='#')return null;
else
{
TreeNode root=new TreeNode(c);
root.left=deserialize(list);
root.right=deserialize(list);
return root;
}
}
public static void main(String[] args) {
String s="12#46##7##35###";
TreeNode root=Serialization.deserialize(Serialization.str2list(s));
System.out.println(Serialization.serialize(root));
}
}
class TreeNode
{
char val;
TreeNode left, right;
TreeNode(char x)
{
val=x;
left=null;
right=null;
}
}