Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.
Design an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.
For example, you may serialize the following tree
1 / 2 3 / 4 5
as?"[1,2,3,null,null,4,5]"
, just the same as?how LeetCode OJ serializes a binary tree. You do not necessarily need to follow this format, so please be creative and come up with different approaches yourself.
?
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Codec { // Encodes a tree to a single string. public String serialize(TreeNode root) { if (root == null) { return "#!"; } String res = root.val + "!"; res += serialize(root.left); res += serialize(root.right); return res; } // Decodes your encoded data to tree. public TreeNode deserialize(String data) { String[] split = data.split("!"); LinkedList<String> queue = new LinkedList<>(); for (int i = 0; i < split.length; i++) { queue.offer(split[i]); } return reconPreOrder(queue); } private TreeNode reconPreOrder(LinkedList<String> queue) { // TODO Auto-generated method stub String poll = queue.poll(); if (poll.equals("#")) { return null; } TreeNode head = new TreeNode(Integer.valueOf(poll)); head.left = reconPreOrder(queue); head.right = reconPreOrder(queue); return head; } } // Your Codec object will be instantiated and called as such: // Codec codec = new Codec(); // codec.deserialize(codec.serialize(root));
?
Serialize and Deserialize Binary Tree
原文:http://hcx2013.iteye.com/blog/2253707