其他分享
首页 > 其他分享> > 二叉树的序列化与反序列化

二叉树的序列化与反序列化

作者:互联网

序列化

思路

如果子节点为空,用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