简介
代码实现
//二叉树
public class TreeNode {
TreeNode left;
TreeNode right;
int data;
public TreeNode(int data) {
this.data = data;
left=null;
right=null;
}
}
public class SerializeTree {
public static void main(String[] args){
TreeNode n1=new TreeNode(1);
TreeNode n2=new TreeNode(2);
TreeNode n3=new TreeNode(3);
TreeNode n4=new TreeNode(4);
TreeNode n5=new TreeNode(5);
TreeNode n6=new TreeNode(6);
n1.left=n2;
n1.right=n3;
n2.left=n4;
n3.left=n5;
n3.right=n6;
middleshow(n1);
System.out.println();
String res=serializeTree(n1);
System.out.println(res);
TreeNode root=unserializeTree(res.split("!"));
middleshow(root);
}
//序列化二叉树-先序
public static String serializeTree(TreeNode root){
if(root==null){
return "#!";
}
String res="";
//root
res+=root.data;
res+="!";
//left
res+=serializeTree(root.left);
//right
res+=serializeTree(root.right);
return res;
}
private static int index=0;
//反序列化二叉树-先序
public static TreeNode unserializeTree(String[] res){
if("#".equals(res[index])){
index++;
return null;
}else{
//root
int data=Integer.valueOf(res[index]);
TreeNode root=new TreeNode(data);
index++;
//left
root.left=unserializeTree(res);
//right
root.right=unserializeTree(res);
return root;
}
}
//中序遍历
public static void middleshow(TreeNode root){
if(root==null){
return;
}
middleshow(root.left);
System.out.print(root.data+",");
middleshow(root.right);
}
}