Step 1: Start serialization at root node 1
Serialize: "1,"
Why: We record the root value first to know where the tree starts
Step 2: Serialize left child 2
Serialize: "1,2,"
Why: We record left subtree next to keep order
Step 3: Serialize left and right children of 2 which are null
Serialize: "1,2,null,null,"
Why: We mark nulls to know where branches end
Step 4: Serialize right child 3
Serialize: "1,2,null,null,3,"
Why: Continue with right subtree
Step 5: Serialize left child 4 of 3
Serialize: "1,2,null,null,3,4,"
Why: Record left child of 3
Step 6: Serialize left and right children of 4 which are null
Serialize: "1,2,null,null,3,4,null,null,"
Why: Mark nulls for 4's children
Step 7: Serialize right child 5 of 3
Serialize: "1,2,null,null,3,4,null,null,5,"
Why: Record right child of 3
Step 8: Serialize left and right children of 5 which are null
Serialize: "1,2,null,null,3,4,null,null,5,null,null,"
Why: Mark nulls for 5's children
Step 9: Start deserialization from string
Deserialize: reading "1" creates root node 1
Why: We rebuild root first
Step 10: Deserialize left subtree starting with "2"
Deserialize: node 2 as left child of 1
Why: Left subtree comes next
Step 11: Deserialize nulls for 2's children
Deserialize: left and right children of 2 are null
Step 12: Deserialize right subtree starting with "3"
Deserialize: node 3 as right child of 1
Step 13: Deserialize left child 4 of 3
Deserialize: node 4 as left child of 3
Step 14: Deserialize nulls for 4's children
Deserialize: left and right children of 4 are null
Step 15: Deserialize right child 5 of 3
Deserialize: node 5 as right child of 3
Step 16: Deserialize nulls for 5's children
Deserialize: left and right children of 5 are null
Result: Final tree rebuilt exactly as:
1
/ \
2 3
/ \
4 5