Serialize and Deserialize a Binary Tree
public class Codec {
int index = 0;
String spliter = ",";
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
serializeHelper(root, sb);
return sb.toString();
}
public void serializeHelper(TreeNode node, StringBuilder sb) {
if (node == null) {
sb.append("#").append(spliter);
} else {
sb.append(String.valueOf(node.val)).append(spliter);
serializeHelper(node.left, sb);
serializeHelper(node.right, sb);
}
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
List<String> list = Arrays.asList(data.split(spliter));
index = 0;
return deserializeHelper(list);
}
public TreeNode deserializeHelper(List<String> tokens) {
if (index < tokens.size()) {
if (tokens.get(index).equals("#")) {
return null;
} else {
TreeNode node = new TreeNode(Integer.valueOf(tokens.get(index)));
index++;
TreeNode left = deserializeHelper(tokens);
index++;
TreeNode right = deserializeHelper(tokens);
node.left = left;
node.right = right;
return node;
}
}
return null;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));