449. Serialize and Deserialize BST
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 search tree. There is no restriction on how your serialization/deserialization algorithm should work. You just need to ensure that a binary search tree can be serialized to a string and this string can be deserialized to the original tree structure.
The encoded string should be as compact as possible.
Note: Do not use class member/global/static variables to store states. Your serialize and deserialize algorithms should be stateless.
---
Related problems
297-serialize-and-deserialize-binary
---
/** | |
* 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 ""; | |
} | |
StringBuilder sb = new StringBuilder(); | |
helpSerialize(root, sb); | |
return sb.toString(); | |
} | |
private void helpSerialize(TreeNode node, StringBuilder sb) { | |
if (node == null) { | |
return; | |
} | |
sb.append(node.val).append(","); | |
helpSerialize(node.left, sb); | |
helpSerialize(node.right, sb); | |
} | |
// Decodes your encoded data to tree. | |
public TreeNode deserialize(String data) { | |
if (data.isEmpty()) { | |
return null; | |
} | |
Queue<String> q = new LinkedList<String>(Arrays.asList(data.split(","))); | |
return helpDeserialize(q, Integer.MIN_VALUE, Integer.MAX_VALUE); | |
} | |
private TreeNode helpDeserialize(Queue<String> q, int min, int max) { | |
if (q.isEmpty()) { | |
return null; | |
} | |
int val = Integer.parseInt(q.peek()); | |
if (val < min || val > max) { | |
return null; | |
} | |
q.poll(); | |
TreeNode node = new TreeNode(val); | |
node.left = helpDeserialize(q, min, val); | |
node.right = helpDeserialize(q, val, max); | |
return node; | |
} | |
} | |
// Your Codec object will be instantiated and called as such: | |
// Codec codec = new Codec(); | |
// codec.deserialize(codec.serialize(root)); |