Q18: How do you Serialize and Deserialize a Binary Tree?
- Serialization: Convert tree to string using Pre-Order DFS traversal, appending
"#"or"null"for null pointers, separated by commas. - Deserialization: Split string by comma into a
Queue<String>. Reconstruct tree recursively by polling values, creating nodes, and assigning left/right child subtrees.
Binary Tree Serialization and Deserialization
import java.util.*;
public class Codec {
public String serialize(TreeNode root) {
StringBuilder sb = new StringBuilder();
buildString(root, sb);
return sb.toString();
}
private void buildString(TreeNode node, StringBuilder sb) {
if (node == null) { sb.append("#,"); return; }
sb.append(node.val).append(",");
buildString(node.left, sb);
buildString(node.right, sb);
}
public TreeNode deserialize(String data) {
Queue<String> nodes = new LinkedList<>(Arrays.asList(data.split(",")));
return buildTree(nodes);
}
private TreeNode buildTree(Queue<String> nodes) {
String val = nodes.poll();
if (val.equals("#")) return null;
TreeNode node = new TreeNode(Integer.parseInt(val));
node.left = buildTree(nodes);
node.right = buildTree(nodes);
return node;
}
}💡 Serializes nodes with null boundary markers and reconstructs tree nodes in pre-order.
Key Takeaways
- Pre-order DFS traversal with null markers enables unambiguous tree reconstruction.
- Queue-based deserialization matches pre-order node creation.
Knowledge Check
Why are explicit null markers (e.g. "#") necessary when serializing a binary tree using pre-order traversal?