二叉树的序列化与反序列化
作者:互联网
序列化
思路
如果子节点为空,用null表示。如果不用null表示会无法确定位置!
序列化的时候和遍历的时候差不多,也是用递归。这里只写一种方法,因为前序,中序,后序只不过是顺序不一样而已,调换一下ans.add
的顺序即可。
代码
public static Queue<String> preSerial(Node head){
Queue<String>ans=new LinkedList<>();
pres(head,ans);
return ans;
}
public static void pres(Node head,Queue<String>ans) {
if(head==null) {
ans.add(null);
}else {
ans.add(String.valueOf(head.val));
pres(head.left,ans);
pres(head.right,ans);
}
}
反序列化
思路
建立二叉树的顺序也和序列化保持一致。
代码
public static Node buildByPreQueue(Queue<String> prelist) {
if(prelist==null||prelist.size()==0) {
return null;
}
return preb(prelist);
}
public static Node preb(Queue<String> prelist) {
String value=prelist.poll();
if(value==null) {
return null;
}
Node head=new Node(Integer.valueOf(value));
head.left=preb(prelist);
head.right=preb(prelist);
return head;
}
最后
说实话,理解的还不是很透彻,最多只能理解一些,但是自己写应该写不出,以后多看看、
标签:Node,head,null,prelist,二叉树,ans,序列化 来源: https://blog.csdn.net/VanGotoBilibili/article/details/115046768