Design an algorithm to **serialize** a binary tree to a string and **deserialize** that string back to the original tree structure.
- `serialize(root)` → string
- `deserialize(data)` → TreeNode
There is no restriction on how your serialization/deserialization algorithm works, as long as a tree can be serialized to a string and this string can be deserialized to the original tree structure.