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

过去的,未来的
2019-11-29 / 0 评论 / 0 点赞 / 1,090 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2019-12-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

二叉树节点定义

class TreeNode{
	public TreeNode(int val) {
		super();
		this.val = val;
	}
	public int val;
	public TreeNode left;
	public TreeNode right;
	public int getVal() {
		return val;
	}
	public void setVal(int val) {
		this.val = val;
	}
	public TreeNode getLeft() {
		return left;
	}
	public void setLeft(TreeNode left) {
		this.left = left;
	}
	public TreeNode getRight() {
		return right;
	}
	public void setRight(TreeNode right) {
		this.right = right;
	}

}
public class SeriableNode {
	private String deserializeStr;
	public static void main(String[] args) {
		SeriableNode sn=new SeriableNode();
		TreeNode root=new TreeNode(1);
		TreeNode root1=new TreeNode(12);
		TreeNode root2=new TreeNode(13);
		TreeNode root3=new TreeNode(121);
		TreeNode root4=new TreeNode(131);
		TreeNode root5=new TreeNode(1312);
		root.left=root1;
		root.right=root2;
		root1.left=root3;
		root2.left=root4;
		root4.right=root5;
		System.out.println(sn.Serialize(root));


	}
        /**
	*二叉树序列化方法
	*/	
	public String Serialize(TreeNode root) {
	    if (root == null)
	        return "#";
	    return root.val + " " + Serialize(root.left) + " " + Serialize(root.right);
	}

	public TreeNode Deserialize(String str) {
	    deserializeStr = str;
	    return Deserialize();
	}
	/**
	*二叉树反序列化方法
	*/
	private TreeNode Deserialize() {
	    if (deserializeStr.length() == 0)
	        return null;
	    int index = deserializeStr.indexOf(" ");
	    String node = index == -1 ? deserializeStr : deserializeStr.substring(0, index);
	    deserializeStr = index == -1 ? "" : deserializeStr.substring(index + 1);
	    if (node.equals("#"))
	        return null;
	    int val = Integer.valueOf(node);
	    TreeNode t = new TreeNode(val);
	    t.left = Deserialize();
	    t.right = Deserialize();
	    return t;
	}

}

运行结果: image.png

0

评论区