Step 1: Start serialization at root node 1
Serialized string so far: "1,"
Why: We record the root value first to start the string
Step 2: Serialize left child 2
Serialized string so far: "1,2,"
Why: We record left subtree values next
Step 3: Serialize left child of 2 which is null
Serialized string so far: "1,2,null,"
Why: We mark null to remember no child here
Step 4: Serialize right child of 2 which is null
Serialized string so far: "1,2,null,null,"
Why: We mark null to remember no child here
Step 5: Serialize right child 3
Serialized string so far: "1,2,null,null,3,"
Why: We record right subtree values after left subtree
Step 6: Serialize left child 4 of node 3
Serialized string so far: "1,2,null,null,3,4,"
Why: We continue preorder traversal
Step 7: Serialize left and right children of 4 which are null
Serialized string so far: "1,2,null,null,3,4,null,null,"
Why: Mark nulls to keep tree shape
Step 8: Serialize right child 5 of node 3 and its null children
Serialized string so far: "1,2,null,null,3,4,null,null,5,null,null"
Why: Complete serialization of entire tree
Step 9: Start deserialization from string
Reading "1" creates root node 1
Why: We rebuild tree from root value first
Step 10: Deserialize left subtree from next values "2,null,null"
Left child of 1 is node 2 with no children
Why: Nulls mark no children
Step 11: Deserialize right subtree from remaining values "3,4,null,null,5,null,null"
Right child of 1 is node 3 with children 4 and 5
Why: Rebuild right subtree recursively
Result: Tree rebuilt exactly as original:
1
/ \
2 3
/ \
4 5