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));